关于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份数据。
00
相似问题