diff --git a/src/xercesc/util/QName.cpp b/src/xercesc/util/QName.cpp
index 40b6c76ca4b5609ed43524362f4f543ca4baa424..1f3f3f0c9b03b99e03e33c78a0b0112d7d79277a 100644
--- a/src/xercesc/util/QName.cpp
+++ b/src/xercesc/util/QName.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.10  2003/09/25 22:24:28  peiyongz
+ * Using writeString/readString
+ *
  * Revision 1.9  2003/09/25 15:22:34  peiyongz
  * Implementation of Serialization
  *
@@ -501,18 +504,9 @@ void QName::serialize(XSerializeEngine& serEng)
 
     if (serEng.isStoring())
     {
-        int bufferLen = 0;
-
-        //note: buffer size is different from actual string length
-        serEng<<fPrefixBufSz;
-        bufferLen = XMLString::stringLen(fPrefix);
-        serEng<<bufferLen;
-        serEng.write(fPrefix, bufferLen);
+        serEng.writeString(fPrefix, fPrefixBufSz, XSerializeEngine::toWriteBufferLen);
 
-        serEng<<fLocalPartBufSz;
-        bufferLen = XMLString::stringLen(fLocalPart);
-        serEng<<bufferLen;
-        serEng.write(fLocalPart, bufferLen);
+        serEng.writeString(fLocalPart, fLocalPartBufSz, XSerializeEngine::toWriteBufferLen);
 
         //do not serialize rawName
 
@@ -520,26 +514,17 @@ void QName::serialize(XSerializeEngine& serEng)
     }
     else
     {
-        int bufferLen = 0;
+        int dataLen = 0;
 
-        serEng>>fPrefixBufSz;
-        fPrefix = (XMLCh*) fMemoryManager->allocate((fPrefixBufSz+1) * sizeof(XMLCh));
-        serEng>>bufferLen;
-        serEng.read(fPrefix, bufferLen);
-        fPrefix[bufferLen] = 0;
+        serEng.readString(fPrefix, (int&)fPrefixBufSz, dataLen, XSerializeEngine::toReadBufferLen);
 
-        serEng>>fLocalPartBufSz;
-        fLocalPart = (XMLCh*) fMemoryManager->allocate((fLocalPartBufSz+1) * sizeof(XMLCh));
-        serEng>>bufferLen;
-        serEng.read(fLocalPart, bufferLen);
-        fLocalPart[bufferLen] = 0;
+        serEng.readString(fLocalPart, (int&)fLocalPartBufSz, dataLen, XSerializeEngine::toReadBufferLen);
 
         //force raw name rebuilt
-        fRawNameBufSz = 0;
+        fRawNameBufSz = 0;        
         fRawName = 0;
 
         serEng>>fURIId;
-
     }
 
 }
diff --git a/src/xercesc/util/XMLAbstractDoubleFloat.cpp b/src/xercesc/util/XMLAbstractDoubleFloat.cpp
index 5d869069ea2e808add7c00737100192975102cc0..30173195424e7d8577306e4e99d085c5afaa9a96 100644
--- a/src/xercesc/util/XMLAbstractDoubleFloat.cpp
+++ b/src/xercesc/util/XMLAbstractDoubleFloat.cpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.16  2003/09/25 22:24:28  peiyongz
+ * Using writeString/readString
+ *
  * Revision 1.15  2003/09/25 15:23:25  peiyongz
  * add sizeof(XMLCh) when allocating memory
  *
@@ -448,9 +451,7 @@ void XMLAbstractDoubleFloat::serialize(XSerializeEngine& serEng)
         serEng << fDataConverted;
         serEng << fSign;
 
-        int rawDataLen = XMLString::stringLen(fRawData);
-        serEng << rawDataLen;
-        serEng.write(fRawData, rawDataLen);
+        serEng.writeString(fRawData);
 
         // Do not serialize fFormattedString
 
@@ -466,11 +467,7 @@ void XMLAbstractDoubleFloat::serialize(XSerializeEngine& serEng)
         serEng >> fDataConverted;
         serEng >> fSign;
 
-        int rawDataLen = 0;
-        serEng >> rawDataLen;
-        fRawData = (XMLCh*) fMemoryManager->allocate((rawDataLen+1) * sizeof(XMLCh));
-        serEng.read(fRawData, rawDataLen);
-        fRawData[rawDataLen] = 0;
+        serEng.readString(fRawData);
 
         // Set it to 0 force it to re-format if needed
         fFormattedString = 0;
diff --git a/src/xercesc/util/XMLBigDecimal.cpp b/src/xercesc/util/XMLBigDecimal.cpp
index 613d95e9f6d489b1ea32b095d61bbf46e4ef6b12..d582626fc62c99c40b07541090a6dcf813238d0f 100644
--- a/src/xercesc/util/XMLBigDecimal.cpp
+++ b/src/xercesc/util/XMLBigDecimal.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.13  2003/09/25 22:24:28  peiyongz
+ * Using writeString/readString
+ *
  * Revision 1.12  2003/09/25 15:23:25  peiyongz
  * add sizeof(XMLCh) when allocating memory
  *
@@ -389,14 +392,10 @@ void XMLBigDecimal::serialize(XSerializeEngine& serEng)
         serEng<<fSign;
         serEng<<fTotalDigits;
         serEng<<fScale;
-        serEng<<fRawDataLen;
-
-        serEng.write(fRawData, fRawDataLen);
-
-        int intValLen = XMLString::stringLen(fIntVal);
-        serEng<<intValLen;
+        serEng<<fRawDataLen;   // we purposely write this seperatly
 
-        serEng.write(fIntVal, intValLen);
+        serEng.writeString(fRawData);
+        serEng.writeString(fIntVal);
 
     }
     else
@@ -406,15 +405,9 @@ void XMLBigDecimal::serialize(XSerializeEngine& serEng)
         serEng>>fScale;
         serEng>>fRawDataLen;
 
-        fRawData = (XMLCh*) fMemoryManager->allocate((fRawDataLen+1) * sizeof(XMLCh));
-        serEng.read(fRawData, fRawDataLen);
-        fRawData[fRawDataLen] = 0;
+        serEng.readString(fRawData);
+        serEng.readString(fIntVal);
 
-        int intValLen = 0;
-        serEng>>intValLen;
-        fIntVal = (XMLCh*) fMemoryManager->allocate((intValLen+1) * sizeof(XMLCh));
-        serEng.read(fIntVal, intValLen);
-        fIntVal[intValLen] = 0;
     }
 
 }
diff --git a/src/xercesc/util/XMLDateTime.cpp b/src/xercesc/util/XMLDateTime.cpp
index 54040a6f541e8e3256671ae6120a3f3b396feb9f..495d431417c2dd0742f35f69c4ca707500c0ce24 100644
--- a/src/xercesc/util/XMLDateTime.cpp
+++ b/src/xercesc/util/XMLDateTime.cpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.16  2003/09/25 22:24:28  peiyongz
+ * Using writeString/readString
+ *
  * Revision 1.15  2003/09/25 15:22:54  peiyongz
  * Solve HP complier error
  *
@@ -1464,12 +1467,8 @@ void XMLDateTime::serialize(XSerializeEngine& serEng)
 
         serEng<<fStart;
         serEng<<fEnd;
-        serEng<<fBufferMaxLen;
-
-        int bufferLen = XMLString::stringLen(fBuffer);
-        serEng<<bufferLen;
-        serEng.write(fBuffer, bufferLen);
 
+        serEng.writeString(fBuffer, fBufferMaxLen, XSerializeEngine::toWriteBufferLen);
     }
     else
     {
@@ -1485,14 +1484,9 @@ void XMLDateTime::serialize(XSerializeEngine& serEng)
 
         serEng>>fStart;
         serEng>>fEnd;
-        serEng>>fBufferMaxLen;
-
-        fBuffer = (XMLCh*) fMemoryManager->allocate((fBufferMaxLen+1) * sizeof(XMLCh));
 
-        int bufferLen = 0;
-        serEng>>bufferLen;
-        serEng.read(fBuffer, bufferLen);
-        fBuffer[bufferLen] = 0;
+        int dataLen = 0;
+        serEng.readString(fBuffer, fBufferMaxLen, dataLen ,XSerializeEngine::toReadBufferLen);
 
     }