【问题标题】:Java/Android- How to use ObjectOutputStream to write a large size of List object in TCP/IP socket programmingJava/Android-TCP/IP socket编程中如何使用ObjectOutputStream编写大尺寸List对象
【发布时间】:2016-03-16 17:52:49
【问题描述】:

我最近在 TCP/IP 套接字编程中使用 ObjectOutputStream 编写对象。

如果我想通过socket写大尺寸的List<Object>/ArrayList<Object>

(例如 list.size: 100,总字节数可能大于有效负载大小),

我应该打电话给writeObject(List<Object>/ArrayList<Object>)吗?

这样可以吗,还是出现任何异常?

ObjectOutputStream 是否会在发送数据包之前自动将列表拆分为几段?还是不支持?

还有其他方法可以发送大尺寸的对象吗?

对于ObjectInputStream,我可以直接调用readObject()来接收List<Object>/ArrayList<Object>的大尺寸吗?

提前致谢。

->

另一个问题:当列表未完全从发送方发送时,ObjectInputStream 是否会收到任何内容? 我想关闭套接字,但 ObjectOutputStream 仍在发送列表。当我关闭套接字时它会立即关闭,并且列表段被破坏了吗?

【问题讨论】:

    标签: java sockets arraylist objectinputstream objectoutputstream


    【解决方案1】:

    这样可以吗,还是出现任何异常? 没关系。

    ObjectOutputStream 是否会自动将列表拆分为几段

    是的。

    在发送数据包之前?还是不支持?

    底层套接字无法控制数据包的发送方式。你也不应该需要它。

    还有其他方法可以发送大尺寸的对象吗?

    很多,但 100 不是很大。如果你有几百万个大对象,那可能是值得的。如果你有几十亿,你肯定需要考虑替代方案。有很多选择,但除非你需要,否则我不会打扰。

    对于ObjectInputStream,我可以调用readObject()来接收大尺寸的List/ArrayList吗?

    是的,这就是它的用途。

    【讨论】:

    • 另一个问题:当列表未完全从发送者发送时,ObjectInputStream 是否收到任何内容?我想关闭套接字,但 ObjectOutputStream 仍在发送列表。当我关闭套接字时它会立即关闭,并且列表段被破坏了吗?
    【解决方案2】:

    我应该打电话给writeObject(List<Object>/ArrayList<Object>)?

    是的。

    这样可以吗,还是出现任何异常?

    没关系,但总是会发生异常,尤其是通过网络。

    ObjectOutputStream 是否会在发送数据包之前自动将列表拆分为几段?还是不支持?

    是的,TCP 和 IP 也是如此。

    还有其他方法可以发送大尺寸的对象吗?

    为什么?你有这个办法。你不需要其他方法。

    至于ObjectInputStream,我可以打电话给readObject()来接收List<Object>/ArrayList<Object>?的大尺寸

    是的。

    【讨论】:

    • 另一个问题:当列表未完全从发送者发送时,ObjectInputStream 是否收到任何内容?我想关闭套接字,但 ObjectOutputStream 仍在发送列表。当我关闭套接字时它会立即关闭,并且列表段被破坏了吗?
    • 如果在流结束前没有完全接收到对象,您将收到EOFException
    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 2017-04-27
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 2013-04-18
    • 1970-01-01
    相关资源
    最近更新 更多