10

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

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

感谢您的时间。

4

5 回答 5

3

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

于 2012-04-08T05:23:54.933 回答
3

当然,但是JavaDocs继续说..

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

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

于 2012-04-08T05:24:49.523 回答
2

一个字节的数据是一个范围从0to的无符号值255,而bytejava 中的 a 定义为范围 from -128to 127,这在读取二进制数据时没有意义。 read()返回一个整数以允许它使用所有非负值来表示有效数据,并返回一个负值来表示数据结束。

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

于 2012-04-08T05:21:50.087 回答
1

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

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

于 2012-04-08T05:29:15.027 回答
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 作为字节值。这里有区别!

于 2012-04-08T05:30:06.750 回答