为什么OutputStreams和InputStreams获取并返回表示字节值的整数?

时间:2014-08-05 13:24:12

标签: java io stream

InputStream的所有子类都返回int,表示读取的字节值。所有OutputStream子类都相同,它将write方法作为参数int而不是byte

两个问题:

1-为什么?

2-如果我想将字节10110101写入输出流,如何在将其传递给write之前以编程方式将其转换为int?当我从输入流接收到int时,如何将其转换为byte

2 个答案:

答案 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签名的)。