InputStream
的所有子类返回一个表示所读字节值的int
。对于所有OutputStream
子类都是一样的,它们将int
作为write
方法的参数,而不是byte
。
两个问题:
1-为什么?
2-如果我想把字节10110101写入输出流,我怎么能在将其传递到write
之前将其编程转换为int ?同样,当我从输入流接收int时,我如何将其转换为byte
?
InputStream.read()
返回int
,因为这是区分有效数据(0..255范围内的值)和文件结束(-1)的简单方法。
OutputStream.write()
接受一个int
,否则你必须转换InputStream.read()
的值。
如果byte
在-128…-1并希望将其转换为范围128..的int
。255,你使用掩码:
byte b = (byte)0xCD;
int i = b & 0xFF;
因为他们需要为EOS返回-1。作为一个副作用,这会导致返回无符号值(即使字节在Java中是有符号的)。