为什么OutputStream的write(int b)方法存在?

时间:2011-12-10 21:16:53

标签: java

  

可能重复:
  Why Java OutputStream.write() Takes Integer but Writes Bytes

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

3 个答案:

答案 0 :(得分:3)

它与w IntputStream.read()一致,并且由于大多数操作(sum,mul,div等)都被提升为int,因此无需经常转换为byte

我认为没关系。

答案 1 :(得分:1)

它实际上从该int写入一个字节(8个低位)。请参阅文档:http://docs.oracle.com/javase/1.4.2/docs/api/java/io/OutputStream.html#write%28int%29

修改:我做了一些挖掘并找到了这个:Why Java OutputStream.write() Takes Integer but Writes Bytes

答案 2 :(得分:0)

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


如果您创建了一个readObject和writeObject,您将获得一个ObjectInputStream和ObjectOutptuStream来读/写您对象的自定义序列化格式。

http://java.sun.com/developer/technicalArticles/ALT/serialization/

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();
}