为什么read()方法返回的不是byte而是int

52 阅读1分钟

为什么read()方法返回的不是byte而是int

read方法读的是字节,那直接返回字节不就好了?

字节流读数据一个字节一个字节的读,如何表示文件已经读完了呢?答案是读到的字节表示END OF FILE即-1。

那么问题来了,字节码中原来为-1(11111111)的数据呢?岂不是冲突了?而返回值设为int就没有这个问题了。

  • END OF FILE:11111111 11111111 11111111 11111111 (补码)
  • 字节码为-1的数据:00000000 00000000 00000000 11111111 (原码)

一句话概括:读到的东西有2^8+1=257种状态,而byte只能表示2^8=256种状态,不够用了。

byte只有一个字节,而int有4个字节。这显然造成了浪费。

选择 int 而不是其他较小的数据类型来作为 InputStream.read() 方法的返回类型的原因:

  • 入参为byte数组时,int类型的返回值可以表示读取到的字节数,而byte类型只能表示到255。
  • 考虑到了Java平台的普遍性和一致性。