在循环中读取时,InputStream会丢失字节

时间:2014-03-17 07:49:20

标签: java serial-port

我正在尝试编写一个java程序来从COM端口读取。有266个字节要读取,因为266个字节不是全部一起生成,这意味着输入流在某个时候可以为空,我使用while循环来读取所有266个字节。根据我逐个检查接收到的字节,问题是有时一个字节可能会丢失(只有一个字节)。以下是代码:

While(numOfBytes < 266) {
    if(!(inputStream.available() > 0)) continue;
    inputStream.read(buffer);
    data[numOfBytes] = buffer[0];
    numOfBytes++;
}

2 个答案:

答案 0 :(得分:0)

您为输入流提供一个数组来存储(is.read(缓冲区))中的数据,但无论它读取多少,只存储1个字节,并将字节数递增1。

尝试改为:

    While(numOfBytes < 266) {
        if(!(inputStream.available() > 0)) continue;
        int b = inputStream.read();

        if(b >= 0){
            data[numOfBytes] = (byte) b ;
            numOfBytes++;
        }
    }       

答案 1 :(得分:0)

通常我会这样做

 byte[] in = new byte[4196];
 int bytesRead = 0;
 while ((bytesRead = is.read(in)) != -1) {
     // add to a StringBuffer maybe
 }