Java 为什么存在OutputStream的write(intb)方法?

Java 为什么存在OutputStream的write(intb)方法?,java,Java,可能重复: 为什么OutputStream类的write()方法在实际逐字节写入数据时采用整数而不是字节?它实际从该int中写入一个字节(8个低阶位)。请参阅文档: Edit:我做了一些挖掘,发现:它与IntputStream.read()是一致的,而且由于大多数操作(sum、mul、div等)都升级为int,因此无需不断转换为字节 我觉得没关系。您可以用它来写有符号或无符号字节。大多数字节流采用无符号字节,匹配的InputStream.read()读取非负的int,您可以将其强制转换为(by

可能重复:


为什么
OutputStream
类的
write()
方法在实际逐字节写入数据时采用整数而不是字节?

它实际从该int中写入一个字节(8个低阶位)。请参阅文档:


Edit:我做了一些挖掘,发现:

它与IntputStream.read()是一致的,而且由于大多数操作(sum、mul、div等)都升级为int,因此无需不断转换为
字节


我觉得没关系。

您可以用它来写有符号或无符号字节。大多数字节流采用无符号字节,匹配的InputStream.read()读取非负的
int
,您可以将其强制转换为
(byte)
,使其具有符号


如果创建readObject和writeObject,则将为您提供一个ObjectInputStream和ObjectOutptStream来读取/写入对象的自定义序列化格式


我想问题是“为什么这个类的设计者没有使用签名
write(byte b)
而不是
write(int b)
”?谢谢我的提问this@sheo:查看编辑中的链接。它如何处理其他3个字节?它是保留整个
int
还是只保留低位字节?(我只是想尽量保持完整)@jili,int中4个字节中的最低字节是由spec写的。。。当然,没有人能阻止你做任何你想做的事情。但是有一个很好的原因,为什么InputStream必须使用不适用于OutputStream的ints(更大的字节):InputStream需要一些监护值来表示它遇到了EOF,这意味着我们必须表示2^8+1的值。但是所有的自动加宽都意味着你几乎没有字节。@Voo,如果你读取了一个int,检查它是否小于0,那么你就可以直接执行了。写(int)时不使用强制转换。简单地说,你不能只得到一个
字节,除非得到byte[index]。@Voo,顺便说一句,实际上我已经排除了流的使用,将它们链接起来有点酷,但是IO效率低下的原因之一是多个缓冲区+额外的层。
private void writeObject(ObjectOutputStream oos)
    throws IOException {
  oos.defaultWriteObject();
  // Write/save additional fields
  oos.write(byteField);
  oos.writeObject(new java.util.Date());
}

// assumes "static java.util.Date aDate;" declared
private void readObject(ObjectInputStream ois)
    throws ClassNotFoundException, IOException {
  ois.defaultReadObject();
  // Read/initialize additional fields
  byteField = oos.read();
  aDate = (java.util.Date)ois.readObject();
}