Java 如何将unicode字节流解码为字符

Java 如何将unicode字节流解码为字符,java,sockets,unicode,utf-8,Java,Sockets,Unicode,Utf 8,我正在编写一个服务器程序,从网络套接字读取UTF-8编码的字节流,并不断解释这些字符 对于需要一个以上字节来表示的字符,有时我只接收套接字上字符的第一个字节,程序将该字节解释为无效字符 例如,客户端运行以下代码:- String s = "Cañ"; byte[] b = s.getBytes("UTF-8"); //sending first three bytes send(b, 0, 3)); //send(byte[], offset, length) //

我正在编写一个服务器程序,从网络套接字读取UTF-8编码的字节流,并不断解释这些字符

对于需要一个以上字节来表示的字符,有时我只接收套接字上字符的第一个字节,程序将该字节解释为无效字符

例如,客户端运行以下代码:-

  String s = "Cañ";

  byte[] b = s.getBytes("UTF-8");

  //sending first three bytes
  send(b, 0, 3));   //send(byte[], offset, length)

  //sending last byte
  send(b, 3, 1);
当服务器收到前三个字节时,它将它们解码为Ca

如何在服务器上检测字符边界


给出的代码是为了产生问题而编写的。我相信TCP有时会破坏字符。

TCP协议是可靠的,如果网络堵塞,有时可能会丢失一些数据包。您可以自己设计协议。通过设置协议数据帧的第一个和最后一个标记,您可以轻松检查是否已收到完整数据。

服务器如何“接收”字节的可能重复?读取字符数据时,不应尝试读取原始
InputStream
,而应将其封装在
InputStreamReader
中,该读取器了解字符和UTF-8等信息