Java - InputStream .read()函数

时间:2011-11-24 21:32:01

标签: java

如果我使用int oneByte = dis.read(byteArray, 0, 1)这是否意味着我只读取1个字节并将其十进制值分配给整数oneByte?

如果我想检查| (管道)字符突破循环我可以做这样的事情: while((oneByte = dis.read(byteArray, 0, 1)) != 124)

6 个答案:

答案 0 :(得分:7)

  

如果我使用int oneByte = dis.read(byteArray,0,1)这是否意味着我是   只读取1个字节,我将其十进制值分配给整数   oneByte?

不。您正在读取最多1个字节到byteArray并接收oneByte中读取的字节数。也许你更喜欢:

int oneByte = dis.read();

另外要小心,因为你会得到整数值...而不是小数。请注意,当您到达流的末尾时,它会返回-1

  

如果我想检查| (管道)字符可以突破循环   做这样的事情:while((oneByte = dis.read(byteArray,0,1))!=   124)

您还需要检查流的结尾(-1)。尝试更像这样的东西:

while(true) {
    int oneByte = dis.read();
    if(oneByte == -1 || oneByte == '|') {
        break;
    }
}

答案 1 :(得分:0)

不,这意味着您正在尝试读取1个字节,并且您要将实际读取的字节数分配给oneByte。因此,在这种情况下,oneByte不能大于1。如果你想检查“|” char你必须做:

dis.read(byteArray, 0, 1);
while(byteArray[0] != 124) {
    dis.read(byteArray, 0, 1);
}

答案 2 :(得分:0)

正如马修在评论中所说,你应该阅读the API

read()方法已超载。没有参数,它会做你想要的。使用您传递的参数,它将返回读取的字符数。

请务必检查EOF-1)。

答案 3 :(得分:0)

没有。 oneByte = dis.read(byteArray,0,1); 0意味着您正在读取0的偏移量(因此,如果您还没有从流中读取任何内容但这将是流的开头),则1意味着您要读取最多1个byte,byteArray是您正在读取的数组,分配给oneByte的返回值是读取的字节数(因为如果您的流包含的字节数比您尝试读取的字节少,则该数字将小于len参数)。

您可以使用read()方法中断管道:

while(dis.read() !- 124)

答案 4 :(得分:0)

dis.read(buffer)将返回读取的字节数 dis.read()将读取一个单字节并将其值返回为整数(0到255)

while循环应该像这样做你想做的事:
while ((oneByte = dis.read()) != 124)

答案 5 :(得分:0)

如果你check the Java API for InputStream,你会发现'返回' InputStream.read(byte [],int,int)的值描述为:

the total number of bytes read into the buffer, or -1 if there is
no more data because the end of the stream has been reached.

所以,不。您正在读取一个字节并存储到byteArray [0]中。 OneByte将为-1,0或1.在这种情况下,断开循环将不起作用。但是,为了记录,如果你真的一次只需要一个字节,那么InputStream.read()方法就可以了。

出于可读性的考虑,您也可能想要检查您正在寻找的确切角色。所以:

while (stream.read()!='|'){ 
    //stuff
}

这样,任何阅读你的代码的人(未来的编码员,评分人等)都会立即知道"哦,它打破了管道角色"。