2011-11-24 57 views
1

如果我使用int oneByte = dis.read(byteArray, 0, 1)这是否意味着我只读1个字节,并将其十进制值赋值为整数oneByte?Java - InputStream .read()函数

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

+1

请参阅InputStream的javadoc:http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#read(byte [],int,int) –

回答

7

如果我使用int oneByte = dis.read(字节阵列,0,1),这是否意味着我 仅读取1个字节,我赋予它的十进制值为整数 oneByte?

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

int oneByte = dis.read(); 

另外要小心,因为你会得到整数值...不是一个小数。请记住,当您到达流尾时,它将返回-1

如果我想检查| (管)字符跳出循环,我可以 做这样的事情:而(!(oneByte = dis.read(字节阵列,0,1))= 124)

你需要还检查流结束(-1)。尝试更多的东西是这样的:

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

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

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

马修在评论说,你应该阅读the API

read()方法被重载。没有理由,它会做你想做的事。通过你传递的参数,它返回读取的字符数。

请确保您检查了EOF-1)。

0

oneByte = dis.read(byteArray,0,1);的0意味着你从0偏移读取(因此,如果您还没有从流读取任何东西,这将是该流的开始) ,1表示您想要读取多达1个字节,byteArray是您正在读取的数组,并且分配给oneByte的返回值是读取的字节数(因为如果您的数据流包含的字节少于您尝试读取的字节数这个数字将小于len参数)。

您可以通过管道使用的read()方法破解:

while(dis.read() !- 124) 
0

dis.read(缓冲区)将返回的结果中读取的字节数。
dis。阅读()将读取单个字节,并返回它的值作为整数(0到255)

while循环应该是这样做你想要什么:
while ((oneByte = dis.read()) != 124)

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 
} 

这样一来,谁读你的代码(未来打码机,平地机等)会立即知道“哦,它打破了对管道字符”。