我知道byte不是一个足以包含read方法结果的正确类型
因此,read方法返回int类型值
但我认为短类型比int更有效。
它可以包含范围-256~255的值
为什么read方法返回int而不是short?
答案 0 :(得分:8)
Java documentation on primitive types建议使用short
代替int
来“节省大型数组中的内存”:
short
:short
数据类型是16位带符号的二进制补码整数。它的最小值为-32,768,最大值为32,767(含)。与byte
一样,适用相同的准则:在内存节省实际上很重要的情况下,您可以使用short
来节省大型数组中的内存。
由于在这种情况下,内存节省实际上并不重要,使用int
是一个更一致的选择。
答案 1 :(得分:2)
有几个原因:
short
类型,这会导致溢出short
的性能等于int
的性能。现代CPU采用32位或64位数,适合int
和short
。在旧的16位处理器上运行代码时, 具有性能优势。很久以前...... 答案 2 :(得分:1)
那是因为read返回读取的字节数,在InputStream中定义了以下方法:
public int read(byte[] b) throws IOException
从输入流中读取一些字节并将其存储到 缓冲阵列b。 实际读取的字节数返回为 整数。此方法将阻塞,直到输入数据可用,结束 检测到文件,或抛出异常。
数组的最大长度约为Integer.MAX - 5,因为您可以使用数组进行操作,然后返回类型为int。
答案 3 :(得分:1)
Read方法返回int
,表示从文件读取的字节数,它是在编写API时做出的设计决定,现在让我们以相反的方式提出相同的问题:
我们可以读取多少个字节?
•short:短数据类型是16位带符号的二进制补码 整数。它的最小值为-32,768,最大值为 32,767(含)。您可以使用短路来节省大量内存 阵列,在内存节省真正重要的情况下。
•int:默认情况下,int数据类型是32位带符号的二进制数 补码整数,最小值为-231且最大值 值231-1。
假设我们将有足够的内存来保存字节,那么int可以提供更好的候选者,因此也就是API设计。然而,API决定用户根据可用资源决定要读取的字节数。
此外,read
方法调用本机代码,在本机语言方面,这些原始数据类型映射到最接近的匹配本机语言数据类型。
干杯!!
答案 4 :(得分:1)
真正的原因是FileInputStream继承的抽象类也是应该在任何编码中读取字符的InputStream的基础,并且它有一个方法
public int read();
用于字符读取流以读取单个字符。
众所周知, char 是16位的无符号整数类型。
因此,无法使用 short ,因为它只有32k(或15位)正值,但我们需要64k(或16位值)字符。
我们需要(-1)表示文件结束。
与各种各样的Reader
相同的故事。