【问题标题】:Android: Accept an ObjectInputStream and pass it on WITHOUT readingAndroid:接受一个 ObjectInputStream 并在不读取的情况下传递它
【发布时间】:2013-11-18 17:02:14
【问题描述】:

我正在使用 getObjectOutputStream 通过 Socket 发送一个对象。

但是,在服务器端(接收对象),我希望按原样接受它,然后将其传递给另一个应用程序。

在服务器端,如果我使用 getObjectInputStream,它会抛出 ClassNotFound 异常,因为那里没有对象的类。那么,我如何简单地接收对象(或其字节流)并将其按原样传递给另一个应用程序?

【问题讨论】:

    标签: android sockets serialization


    【解决方案1】:

    只需复制字节,在套接字输入和输出流上使用经典的复制循环:

    while ((count = in.read(buffer)) > 0)
    {
        out.write(buffer, 0, count);
    }
    

    根本不要将对象流用作中间人。

    【讨论】:

    • 嗨,EJP。您的解决方案是否能让我最终使用 getObjectInputStream 接收完整的对象?我只是问,因为写作是在循环中完成的,而不是“一次性”完成的。
    • 当然,这就是我在回答您的问题时建议它的原因。我不明白关于“循环写入”的部分,但只要你正确传输所有字节,你就不可能有问题。
    • 好的。在从客户端发送时,我是否必须使用您的代码,或者我可以通过 ObjectOutputStream 发送它吗? (我认为循环中的写入可能会以burts形式发送数据,可能会以不同的方式处理而不是一次尝试)。
    • 我不明白这个问题。如果要发送对象,则必须在初始发送者处使用 ObjectOutputStream,但只有您知道是否真的需要发送对象。我也不明白你关于爆发的理论。
    • 实际上我是 1) 通过套接字将对象发送到服务器,2) 服务器接收它,然后 3) 将其发送到同一虚拟机中的另一个应用程序。因此,根据您的建议,我将使用 ObjectInputStream 本身传递对象,然后从服务器到应用程序,我将使用您的代码。忘记爆发等。
    猜你喜欢
    • 2021-07-22
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2013-11-09
    相关资源
    最近更新 更多