【诡异的问题】使用BufferedReader.read(char[] buf)方法读取Socket流中的数据,没有读完整

Yamatehhhhhh 2018-01-26 05:40:20
使用BufferedReader读取Socket流中的数据,发现读出来的内容不完整,有一部分漏掉了,如下图所示,每次都只能打印出前16003个字符:
...全文
2877 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你的效果是正常的,因为TCP是流协议,,每一次数据包发送的数据大小是不确定的,,有可能一个包发出去,有可能分多个包发出去,所以你得在接收端使用while循环来取得对方发送过来的数据~!
蓝海之上 2018-02-08
  • 打赏
  • 举报
回复
不论如何你都要循环读取的,哪怕一次可以读完,为了功能的完整性,也必须循环读取,需要用到while判断后方是否还有数据
Yamatehhhhhh 2018-01-29
  • 打赏
  • 举报
回复
引用 3 楼 IT_choshim 的回复:
应该是你定义的byte数组的问题,数组容量多大呢,容量不如需要读取的数据大的话要多次读取的
截图中可以看到,数组的容量是163840,只读取了大约不到20000个字符,数组容量是肯定够用的。
Yamatehhhhhh 2018-01-29
  • 打赏
  • 举报
回复
引用 2 楼 oyljerry 的回复:
没有一次把数据返回给你。每次读取的时候判断返回值。看还有没有数据。然后循环读取
我用的是read(char[])方法,不是read()或者readLine()之类的,返回值是一个整数,表示此次读取到的用户数量,无法通过返回值来判断是否全部读到了。
  • 打赏
  • 举报
回复
while(bufferReader.read(chaBuf,0,16003) !=-1) { // 你的逻辑处理。。。 } 这样就是能直到读完所有的数据再结束
邻家大哥呀 2018-01-27
  • 打赏
  • 举报
回复
应该是你定义的byte数组的问题,数组容量多大呢,容量不如需要读取的数据大的话要多次读取的
oyljerry 2018-01-27
  • 打赏
  • 举报
回复
没有一次把数据返回给你。每次读取的时候判断返回值。看还有没有数据。然后循环读取
Yamatehhhhhh 2018-01-26
  • 打赏
  • 举报
回复
如果使用两次read方法,就能够读取完整:

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧