diff --git a/core/fxcrt/fx_basic.h b/core/fxcrt/fx_basic.h
index db0072a..47cce9a 100644
--- a/core/fxcrt/fx_basic.h
+++ b/core/fxcrt/fx_basic.h
@@ -57,30 +57,6 @@
   std::unique_ptr<uint8_t, FxFreeDeleter> m_pBuffer;
 };
 
-class CFX_ByteTextBuf : public CFX_BinaryBuf {
- public:
-  FX_STRSIZE GetLength() const { return m_DataSize; }
-  CFX_ByteString MakeString() const {
-    return CFX_ByteString(m_pBuffer.get(), m_DataSize);
-  }
-  CFX_ByteStringC AsStringC() const {
-    return CFX_ByteStringC(m_pBuffer.get(), m_DataSize);
-  }
-
-  void AppendChar(int ch) { AppendByte(static_cast<uint8_t>(ch)); }
-  CFX_ByteTextBuf& operator<<(int i);
-  CFX_ByteTextBuf& operator<<(uint32_t i);
-  CFX_ByteTextBuf& operator<<(double f);
-  CFX_ByteTextBuf& operator<<(const char* pStr) {
-    return *this << CFX_ByteStringC(pStr);
-  }
-  CFX_ByteTextBuf& operator<<(const CFX_ByteString& str) {
-    return *this << str.AsStringC();
-  }
-  CFX_ByteTextBuf& operator<<(const CFX_ByteStringC& lpsz);
-  CFX_ByteTextBuf& operator<<(const CFX_ByteTextBuf& buf);
-};
-
 class CFX_WideTextBuf : public CFX_BinaryBuf {
  public:
   void AppendChar(wchar_t wch);
diff --git a/core/fxcrt/fx_basic_buffer.cpp b/core/fxcrt/fx_basic_buffer.cpp
index bcf0570..a359bdd 100644
--- a/core/fxcrt/fx_basic_buffer.cpp
+++ b/core/fxcrt/fx_basic_buffer.cpp
@@ -95,37 +95,6 @@
   m_DataSize += size;
 }
 
-CFX_ByteTextBuf& CFX_ByteTextBuf::operator<<(const CFX_ByteStringC& lpsz) {
-  AppendBlock(lpsz.raw_str(), lpsz.GetLength());
-  return *this;
-}
-
-CFX_ByteTextBuf& CFX_ByteTextBuf::operator<<(int i) {
-  char buf[32];
-  FXSYS_itoa(i, buf, 10);
-  AppendBlock(buf, FXSYS_strlen(buf));
-  return *this;
-}
-
-CFX_ByteTextBuf& CFX_ByteTextBuf::operator<<(uint32_t i) {
-  char buf[32];
-  FXSYS_itoa(i, buf, 10);
-  AppendBlock(buf, FXSYS_strlen(buf));
-  return *this;
-}
-
-CFX_ByteTextBuf& CFX_ByteTextBuf::operator<<(double f) {
-  char buf[32];
-  FX_STRSIZE len = FX_ftoa((float)f, buf);
-  AppendBlock(buf, len);
-  return *this;
-}
-
-CFX_ByteTextBuf& CFX_ByteTextBuf::operator<<(const CFX_ByteTextBuf& buf) {
-  AppendBlock(buf.m_pBuffer.get(), buf.m_DataSize);
-  return *this;
-}
-
 void CFX_WideTextBuf::AppendChar(wchar_t ch) {
   ExpandBuf(sizeof(wchar_t));
   *(wchar_t*)(m_pBuffer.get() + m_DataSize) = ch;
