Java 中 TCP字节流是转换成字符流的。
比如说一个字符串
伪代码
// Client客户端:
String str = “字节流转字符流“;
byte[] buff = str.getBytes("UTF-8")
// Server服务端
InputStreamReader reader = new InputStreamReader(inputStream,"UTF-8")
char[] char = new char[1024];
reader.read(char,,);
客户端UTF-8编码字符串的字节流发送给服务端,期间可能一个字符对应的字节被拆分成多个包发送了(因为TCP时候面向字节的,一个UTF-8字符对应多个字节)。
- 这种情况的话,服务端是如何保证正确解析字节到字符的?
- 还有UTF-8编码英文数字为一个字节,中文为多个字节,那么来了一个字节它又是怎么确定这个字节是英文数字,还是一个中文编码的一部分呐(字符编码是不是类似于哈夫曼树一样那呐?)
希望能够解惑,十分感激。推荐博客也可以。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
下面给出我个人的理解哈,大家切磋下
utf8编码介绍:https://baike.baidu.com/item/...
TCP
中拆包
和粘包
现象,这个在TCP数据传输过程中,肯定会存在的。TCP
协议是面向数据流的,能保证数据的正确性。也就是说源源不断的流到了
接收端
之后,组装在一起,数据能保证是正确。因此,解决
拆包
和粘包
在于发送端
和接收端
定义数据边界
,比如:0xFF
作为边界值等。这些也就是
协议
,发送端
和接收端
根据协议对数据进行编解码,这样就可以确定每个字节代表的意义。