【问题标题】:UTF8 Encoding and Network StreamsUTF8 编码和网络流
【发布时间】:2013-07-08 21:45:41
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: character-encoding buffer bytearray networkstream


    【解决方案1】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多