【问题标题】:Java - Is ObjectInput/OutputStream compatible with DataInput/OutputStream?Java - ObjectInput/OutputStream 是否与 DataInput/OutputStream 兼容?
【发布时间】:2014-10-24 15:07:39
【问题描述】:

例如:

  • 我使用 ObjectInput/OutputStream 通过 Socket outputStream 发送一个字节[]:

    ObjectOutputStream myOutput = new ObjectOutputStream(mySocket.getOutputStream());
    myOutput.write(myByteArray);
    
  • 在另一端,他使用DataInputStream(也可能使用其他InputStream)来读取:

    DataInputStream hisInput = new DataInputStream(hisSocket.getInputStream());
    hisInput.read(hisByteArray);
    

所以我的问题是:

  • 接收器会正确读取字节[]吗?
  • String 使用 writeObject 和 readUTF 怎么样?

信息:

  • 我只能使用 Java 库 (JRE8),并且是 Java 流的新手。
  • 除了知道他们没有使用 ObjectInput/OutputStream 之外,我不能期望或强迫对方使用什么 Stream
  • 我问这个问题是因为使用 ObjectInput/OutputStream 可能会为我节省一些工作,我听取了我的另一个 question 的建议。

【问题讨论】:

  • 仅供参考,数据和对象输入/输出流都可以追溯到通信/序列化协议不如现在发达的时代。现在我们有 XML 和 JSON,它们都是技术中立的和大/小端中立的。
  • 是Byte[] 还是byte[]?
  • @DavidConrad 哦!对不起,错字,我编辑了问题。

标签: java stream


【解决方案1】:

接收方会正确读取 Byte[] 吗?

没有。

String 使用 writeObject 和 readUTF 怎么样?

没有。

如果您使用ObjectOutputStream.writeObject 写入,读取流的唯一实用方法是使用ObjectOutputStream.readObject。

理论上,您可以自己编写代码来实现serialization protocol(使用字节或“数据”输入流),但这不是明智/实用的方法。


除了知道他们没有使用 ObjectInput/OutputStream 之外,我不能期望或强迫对方使用什么 Stream

无论你在写作时使用什么格式,你都将迫使另一端使用能够阅读它的东西。强迫另一端(如果是 Java)使用 ObjectInputStream 不应该是一个问题。另一端是否可以用另一种语言实现是另一回事,但是您可能应该考虑将 JSON 或 XML 之类的东西作为您的编码方案。

【讨论】:

  • 这是一个残酷的事实,所以总之ObjectOutputStream只能和ObjectInputStream一起工作????
  • 我没这么说。我说这是唯一的实用方法。您可以实现取消选择 Java 对象序列化格式的代码(已指定!)...但这几乎不是一个实际的解决方案。
  • Java 也序列化原始类型?我想因为它是原始的,所以不必序列化。
  • A Byte[] 不是原始的。
  • @DavidConrad 好吧,这与我关于强制与否的其他问题有关。但我已经编辑了我的问题,抱歉我的错字,它实际上是 byte[] 而不是 Byte[]。
猜你喜欢
  • 2014-05-01
  • 1970-01-01
  • 2014-12-09
  • 2012-05-21
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多