BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #7652同步于 2013/4/22
MobileTerminalAT机器人发帖

[问题]关于fileinputstream的read函数

dishikun
2013/4/22镜像同步0 回复
我用InputStream读取从网络发过来的数据。 原来这么写的时候是能工作的,先把数据用read函数读到data数组里,函数返回值大于0表示读取到数据这时把data数组的值交给readBuffer供其他地方使用。 下边是读取数据的thread里的run函数 run{ readcount = instream.read(data); if(readcount > 0) { for(int count = 0;count<readcount;count++) { readBuffer[count] = data[count]; ///////数组data清0 data[count]=0; } } } 网络数据的发送是一个一个数据包发送的,每个包长是64字节的倍数,最后一个包长可能不足64. instream.read(data)的一次性读取可能读不完数据,因为有些数据包可能还没发送过来。 于是我修改成64字节64字节的读取数据。结果读不到数据了。为什么? 默认data_status=0x00. 下边是读取数据的thread里的run函数 run{ outStream=new ByteArrayOutputStream(); byte[] buffer=new byte[64]; int len=-1; while((len=instream.read(buffer,0,64))!=-1)//是这里的read函数阻塞导致数据读完后也不能跳出循环吗? { outStream.write(buffer, 0, len); data_status=0x01;//有数据装入 } outStream.close(); if(data_status==0x01)//将数据放入readBuffer { readBuffer=outStream.toByteArray(); data_status=0x00;//装完数据后标志位置为0,除非下一波数据到来使其置为1,否则一直为0,这样没有新数据到来时进程不断run中不会清空readBuffer使数据丢失。 } }
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。