Character encoding UTF8编码与网络流

Character encoding UTF8编码与网络流,character-encoding,buffer,bytearray,networkstream,Character Encoding,Buffer,Bytearray,Networkstream,客户端和服务器通过TCP相互通信。服务器和客户端相互发送UTF-8编码的消息 编码UTF-8时,每个字符的字节数是可变的。表示单个字符可能需要一个或多个字节 假设我正在网络流上读取一条UTF-8编码的消息,这是一条巨大的消息。在我的例子中,大约是145k字节。创建此大小的缓冲区以从网络流读取可能会导致OutMemoryException,因为字节数组需要该数量的顺序内存 最好在while循环中读取网络流,直到整个消息被读取为止,将片段读入较小的缓冲区(可能是4kb),然后解码字符串并连接 我想知

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

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

假设我正在网络流上读取一条UTF-8编码的消息,这是一条巨大的消息。在我的例子中,大约是145k字节。创建此大小的缓冲区以从网络流读取可能会导致OutMemoryException,因为字节数组需要该数量的顺序内存

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

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


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

这是一个已解决的问题。呜呜