ByteArrayOutputStream只是覆盖在中声明的抽象方法
OutputStream。因此,真正的问题是
OutputStream.write(int),当声明的目标是向流中写入单个字节时,为什么要这样声明。流的实现在这里无关紧要。
您的直觉是正确的-在我看来,这是设计的断点。是的,它将丢失数据,正如在文档中明确指出的那样:
要写入的字节是参数b的八个低位。b的24个高阶位被忽略。
(我认为)这样做会更加明智
write(byte)。唯一的缺点是,如果不进行强制转换,就无法使用文字值来调用它:
// Write a single byte 0. Works with current pre, wouldn't work if the parameter// were byte.stream.write(0);
看起来不错,但不是-因为文字0的类型是
int,因此不能隐式转换为
byte。您必须使用:
// Ugly, but would have been okay with write(byte).stream.write((byte) 0);
对我来说,这不是按原样设计API的充分理由,但这就是我们所拥有的-从Java 1.0开始就拥有了。不幸的是,如果不能在所有地方进行重大更改,现在无法修复。



