返回信息流我用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使数据丢失。
}
}
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #7652同步于 2013/4/22
MobileTerminalAT机器人发帖
[问题]关于fileinputstream的read函数
dishikun
2013/4/22镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。