获得StreamCorruptedException

时间:2013-02-01 07:53:02

标签: android sockets object client outputstream

我正在尝试流式传输ObjectOutput,但我收到上述错误。

CODE:

private void writelogin(int i, int j, int k, int c4, int l, int m, Socket sock) throws IOException, InterruptedException {
    ObjectOutputStream dos = new ObjectOutputStream((OutputStream)sock.getOutputStream());
    boolean data = true;
    int[] btw = new int[]{i,j, k, c4, l, m};

    do {
        ((ObjectOutput) dos).writeObject(btw);
            data=false;
        } while (data);
            dos.flush();
            dos.close();}}

我不知道为什么。

例外是通过System.out而非Errorlog的outet。

我的服务器接收到的内容: AC ED(有时很多00和其他六位'似乎随机'数字)

我的Stream必须发送的内容: 03 96 144 54 79 05

我的服务器必须接收的内容: 03 60 90 36 4F 05

允许十六进制数是正确的,所以不是问题。

有问题,因为我使用ObjectOutputStreamArray,因为我使用DataOutputStream并通过dos.writeByte(i);dos.writeByte(j);放置每个块本身,它运行正常。

想出了一些新内容:我的ObjectOutputStream自己发送AC ED 00 05 ...有谁知道如何避免这种情况?我什么也没发送,但他确实没有。

无所谓,找到了一种解决方法。想通过DataOutputStream甚至可以发送一个数组,所以这是可以避免的。

2 个答案:

答案 0 :(得分:1)

您必须在套接字的两端使用相同的ObjectInputStream和ObjectOutputStream,而不是每次需要其中一个时创建一个或另一个。

答案 1 :(得分:0)

以下代码看起来很可疑:

((ObjectOutput) dos).writeObject(btw);

只需尝试,

dos.writeObject(btw);

为什么要进行类型转换,对ObjectOutput也是如此?

编辑:我认为你在数组初始化中遗忘了new

int[] btw = new int[]{i,j, k, c4, l, m};