2013-07-08 103 views
0

客户端和服务器通过TCP相互通信。服务器和客户端互相发送UTF-8编码的消息。UTF8编码和网络流

编码UTF-8时,每个字符的字节数是可变的。它可能需要一个或多个字节来表示单个字符。

假设我正在读取网络流上的UTF-8编码消息,这是一条巨大的消息。在我的情况下,它大约是145k字节。要创建这个大小的缓冲区以便从网络流中读取,可能会导致出现OutMemoryException,因为字节数组需要大量的顺序存储器。

最好在while循环中从网络流中读取数据,直到读取完整的消息为止,将这些数据读入较小的缓冲区(可能是4kb),然后解码字符串并连接。

我想知道的是当读缓冲区的最后一个字节实际上是由多个字节表示的一个字符的字节之一时会发生什么。当我解码读取缓冲区时,最后一个字节和下一个读取的开始字节将是无效的或错误的字符。在我脑海中解决这个问题的最快方法是使用非变量编码(如UTF-16)进行编码,然后使缓冲区成为每个字符中字节数的倍数(使用UTF-16作为缓冲区功率2,UTF-32的功率4)。

但UTF-8似乎是一种常见的编码,这将使我相信这是一个解决的问题。除了改变编码之外,还有其他解决我的问题的方法吗?也许使用链表类型对象来存储字节将是处理这个问题的方法,因为它不会使用顺序存储器。

回答