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