【问题标题】:Socket streaming in JavaJava中的套接字流
【发布时间】:2013-05-21 17:51:26
【问题描述】:

当通过套接字连续写入/读取数据集时,如何识别一组数据的结束、下一组数据的开始,以及整个数据集是否还在流中进行检索,而不仅仅是一个一块?

为了简单起见,假设我通过套接字发送 JSON 字符串。我如何知道整个对象是否在那里,并从头到尾获取该对象以便我可以正确读取它?请记住,这背后可能还有更多对象。

【问题讨论】:

  • 能否提供一些代码?
  • 如果你使用 Jackson,你可以告诉 JsonParser 在读取 JSON 值时不要自动关闭输入流。

标签: java sockets tcp inputstream


【解决方案1】:

这取决于。如果您使用 ObjectOutputStream,那么 Java 会为您处理这些问题。显然这是特定于 Java 的,并且要求您在另一边有一个 ObjectInputStream。它还期望您将可序列化的对象发送到另一端。 String 然而是一个可序列化的对象,我通常希望任何数据结构都是可序列化的。

否则,您将不得不自己考虑某种容器格式。如今,使用 XML 结构将数据序列化成也很常见。如果你达到更高的水平,你就会到达使用网络服务的地步。

【讨论】:

  • “数据容器”可能是比“数据结构”更好的名称,但这个名称从大学很久以前就一直存在......
  • 有趣,所以通过使用对象输入/输出流,他们将确保我得到一个完整的对象或什么都没有?所以他们会确保整个对象都被写入和接收,一起?所以我不用担心1/2对象?
  • serialVersionUID 必须相同。类不需要相同,“实例”当然不可能相同。
  • 你仍然需要使用正确的词。您在谈论“类版本”时写了“对象实例”。
  • class 的 'serialVersionUID' 两端应该相同。你似乎没有明白这里的意思。
猜你喜欢
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
相关资源
最近更新 更多