Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java StreamCorruptedException:无效类型代码:AC_Java_Multithreading_Streaming_Object - Fatal编程技术网

Java StreamCorruptedException:无效类型代码:AC

Java StreamCorruptedException:无效类型代码:AC,java,multithreading,streaming,object,Java,Multithreading,Streaming,Object,我的问题是,当它第二次尝试读取对象时,会抛出异常: java.io.StreamCorruptedException: invalid type code: AC at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1356) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) at Client.run(Base

我的问题是,当它第二次尝试读取对象时,会抛出异常:

java.io.StreamCorruptedException: invalid type code: AC
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1356)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
    at Client.run(BaseStaInstance.java:313)

java.io.StreamCorruptedException: invalid type code: AC
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1356)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
    at Client.run(BaseStaInstance.java:313)
我第一次发送完全相同的对象消息;然而,当我第二次尝试做同样的事情时,它抛出了上面的错误。是否需要重新初始化readObject()方法?我甚至打印出了下面这行接收到的消息对象,它与第一个实例完全相同

Object buf = myInput.readObject();
我假设附加有一些问题,但我真的没有附加的用处。我只想每次都读一句新台词。 我真的很感谢你帮我修复这个错误。多谢各位

==================================

在这一行之前,我只是在run()方法中为套接字创建输入和输出对象。对象声明在类中的run()方法之外:-

@Override
public void run() {
    try {
        sleep((int) 1 * 8000);
    } catch (Exception e) {
        e.printStackTrace();
    }

    try {
        //Creating input and output streams to transfer messages to the server
        myOutput = new ObjectOutputStream(skt.getOutputStream());
        myInput = new ObjectInputStream(skt.getInputStream());
        while (true) {
            buf = myInput.readObject();
        }
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

你是对的;我不关这个东西。我不知道该怎么做。

根本的问题是,您正在使用一个新的
ObjectOutputStream
来写入一个已经使用以前的
ObjectOutputStream
来写入的流。这些流具有由各自的构造函数写入和读取的头,因此,如果您创建另一个
ObjectOutputStream
,您将编写一个新头,该头以-猜怎么着?-
0xAC、
和现有的
ObjectInputStream
此时不需要另一个头,因此它会呕吐

在@trashgod引用的Java论坛线程中,我应该省略关于“两端的每个对象都是新的”的部分:这只是浪费。在套接字的生命周期中使用单个OOS和OIS,并且不要在套接字上使用任何其他流

如果想忘记所写的内容,请使用
ObjectOutputStream.reset()。


不要在同一套接字上使用任何其他流或
读卡器
写卡器
。对象流API可以处理所有Java基元数据类型和所有可序列化的类。

我不确定在哪里关闭objectNB您应该捕获EOFEException,不要将其视为错误:不要记录或打印堆栈跟踪;让它终止读取循环。我不知道为什么您会在您所在的位置捕获未知后异常:它不能从相应的try块中抛出。睡眠简直是浪费时间。删除它。+1@rookie:这是正确的答案,来自原始来源!:-)@AkhilKNambiar我不知道你问我的问题上面没有回答。@AndroidOptimist什么代码?我没有发布任何代码。这个答案的本质是删除代码。