关于stream会不会存在粘包的疑问

来源:7-2 NIO Family一览

慕码人3191957

2021-02-04

老师您好,已经知道的是,由于channel是要使用buffer的,而buffer往往有大小限制的,例如256,如果读取的消息大小为200,则会存在粘包问题。但如果用stream的话,例如 : String str = dis.readUTF();dis为DataInputStream,那么会存在粘包问题吗,如果会的话,又是为什么呢

写回答

1回答

Qiujuer

2021-02-05

粘包与使用channel还是stream没有关系。

粘包是业务层面的错误,简单来说是指:对方发送多份数据,但数据与数据之间没有用以区分的手段,则接收方可能收到多份数据揉杂的数据,这就是粘包。

比如发送方想发送:"A" "BD" 

那么接收方可能收到:“ABD”

虽然数据都不变,但其业务含义就变了,对于接受来说就是一条数据,而对于业务来说应该是2条数据。

解决这个问题最简单的办法就是加描述信息,比如:

发送方:“A\n”"BD\n"
接收方:“A\nBD\n”

虽然接收方也是收到的一个组合体,但是只要两边约定好了都是使用“\n”作为分割,那么则可以将其分开得到最原始的2份数据。


0
0

Socket网络编程进阶与实战 系统掌握Socket核心技术

理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选

2316 学习 · 476 问题

查看课程