为什么FileInputStream中的read()返回一个整数?

时间:2012-04-08 05:19:56

标签: java byte fileinputstream

This页面显示说,当它想要指示没有更多字节要读取时,该方法可以返回-1。

但是一个字节的范围是-128到127,对吗?因为它返回一个字节,所以read()的返回类型不是更有意义吗?

感谢您的时间。

5 个答案:

答案 0 :(得分:3)

它将值作为int返回的原因是它需要返回0-255之间的值,并且能够指示何时没有更多字节要从文件中读取。通过使用int,您可以返回整个范围的正无符号值0-255,以及指示文件何时完成。它无法仅提供256个byte值的不同值,其中一半值是Java默认值为负值。

答案 1 :(得分:3)

当然,JavaDocs继续说..

  

<强>返回:
       读入缓冲区的总字节数 ,如果由于文件末尾已到达而没有更多数据,则为-1。

希望一次可以从流中读取超过127个字节。

答案 2 :(得分:2)

数据字节是无符号值,范围从0255,而java中的byte定义范围从-128到{{1在读取二进制数据时没有意义。 127返回一个整数以允许它使用所有非负值来表示有效数据,并使用负值来表示数据结束。

通常,函数应使用与用于返回数据的不同的机制来指示错误条件或异常。在最简单的情况下,它可以返回一个不能用于表示有效数据的值,以确保其含义是明确的。

答案 3 :(得分:1)

  

问:对于read()的返回类型,它是否更有意义   字节?

答:不,因为“byte”不能返回整个范围0..255(无符号),而“short”只是一个PITA。

答案 4 :(得分:0)

FileInputStream类可以将文件内容作为字节流读取。这是一个简单的例子:

InputStream input = new FileInputStream("c:\\data\\input-text.txt");

int data = input.read();
while(data != -1) {
  //do something with data...
  doSomethingWithData(data);

  data = input.read();
}
input.close();

注意:为清楚起见,此处已跳过正确的异常处理。要了解有关正确异常处理的更多信息,请转至Java IO异常处理。

FileInputStream的read()方法返回一个int,其中包含读取的字节的字节值。如果read()方法返回-1,则流中不再有要读取的数据,并且可以将其关闭。也就是说,-1作为int值,而不是-1作为字节值。这里有区别!