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

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

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

感谢您的时间。

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

当然,但JavaDocs继续说..

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

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

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

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

问:read()的返回类型是不是更有意义?

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

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(); 

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

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