为什么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平台的普遍性和一致性。