我知道字节类型不足以包含read方法的结果。
因此,read方法返回int类型值。
但我认为short类型比int更高效。
它可以包含范围为-256~255的值。
为什么read方法返回int而不是short?
我知道字节类型不足以包含read方法的结果。
因此,read方法返回int类型值。
但我认为short类型比int更高效。
它可以包含范围为-256~255的值。
为什么read方法返回int而不是short?
Java原始类型文档建议使用short
而不是int
来“在大数组中节省内存”:
short
:short
数据类型是16位带符号的二进制补码整数。它的最小值为-32,768,最大值为32,767(包括边界)。与byte
一样,同样的准则适用:在需要实际节省内存的情况下,可以使用short
来节省大型数组中的内存。
由于在这种情况下实际上并不需要节省内存,因此使用int
是更一致的选择。
short
类型会导致溢出。short
的性能与 int
相等,这是由于处理器的“位数”。现代CPU采用32位或64位数字,这适合于 int
和 short
。在旧的16位处理器上运行代码时曾经有性能优势。很久以前...public int read(byte[] b) throws IOException
public int read();
Reader
都有相同的情况。读取方法返回 int
,表示从文件中读取的字节数,这是编写API时做出的设计决策,现在让我们换一种方式提问:
我们最多可以读取多少字节?
•short:short数据类型是一个16位有符号的二进制补码整数。它的最小值为-32,768,最大值为32,767(包括)。您可以在需要实际节省内存的大型数组中使用short以节省内存。
•int:默认情况下,int数据类型是一个32位有符号的二进制补码整数,其最小值为-231,最大值为231-1。
假设我们将有足够的内存来保存字节,则int比short更适合作为API设计的候选。但是API将决定权留给用户,根据可用资源决定要读取多少字节。
此外,read
方法调用本机代码,在本机语言方面,这些原始数据类型映射到最接近的本机语言数据类型。
干杯!!
short
内部与int
表示方式相同(在其他 VM 中可能更有效,因为它是实现相关的,但在实践中,short
和int
总是相同的)。唯一应考虑使用short
的地方是在创建大型short[]
数组时。在这种情况下,VM 通常内部使用真正的两字节短整型而不是int
(这会节省空间)。 - Petr Janeček