【问题标题】:How does ObjectOutputStream call writeObject when the object is very large?对象很大时,ObjectOutputStream 怎么调用 writeObject?
【发布时间】:2016-02-23 15:12:45
【问题描述】:

我有一个大文件需要通过套接字从服务器传输到客户端。如果我想在ObjectOutputStream 中使用writeObject 发送对象,正常的做法是什么?在客户端读取怎么样?

【问题讨论】:

  • 你会在客户端调用ObjectInputStream.readObject()。
  • 如果你想使用writeObject(),你使用writeObject()。有什么问题?
  • 我的问题是如何将大数据包装成一个可以通过writeObject()传输的对象。换句话说,我是否需要将数据分成不同的段,然后将它们分别包装到对象中?

标签: sockets objectoutputstream large-data


【解决方案1】:

小心使用对象流,它们具有将对象存储和保存在内存中以防止双重实例的不良副作用。完成后立即关闭它。

如果对象很大,你可以用压缩器链接你的流,java中有很多很好的压缩对象,比如DeflatorOutputStreamInflatorInputStream

有关如何操作的快速教程,请查看以下内容: https://docs.oracle.com/javase/tutorial/essential/io/objectstreams.html

【讨论】:

  • 不回答这个问题,不管它是什么。
  • 他没有询问 (a) 使用对象流的适当性/缺陷或 (b) 压缩。这只会留下您的链接,这使得该链接的相关部分成为仅链接的答案。
【解决方案2】:

我是否需要将数据分成不同的段...?

没有。只需在一端致电writeObject(),在另一端致电readObject()。 TCP 会为你整理出所有的分段。

【讨论】:

  • @downvoter 好的,这是什么?你不打电话给readObject()writeObject()? TCP 不会为您整理所有分段?请提供信息。
猜你喜欢
  • 2023-03-26
  • 2014-04-16
  • 2011-05-22
  • 2016-10-18
  • 2013-11-20
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
相关资源
最近更新 更多