我的问题是,当它尝试第二次读取对象时,会引发异常:
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();
}
}
}
你是对的; 我没有关闭物体。我不确定该怎么做。
潜在的问题是,您正在使用newObjectOutputStream
来写入已使用过before的流ObjectOutputStream
。这些流具有由各自的构造函数编写和读取的标头,因此,如果创建另一个ObjectOutputStream
标头,则将编写一个新的标头,以-猜猜是什么?-0xAC,并且现有的ObjectInputStream
对象此时不希望有其他标头,因此会阻塞。
在@trashgod引用的Java Forums线程中,我应该省略有关“两端的每个对象都重新创建”的部分:这只是浪费。在套接字的整个生命周期内使用一个OOS和OIS,并且不要在套接字上使用任何其他流。
如果您想忘记自己写的东西,请使用 ObjectOutputStream.reset().
并且不要使用任何其他流Readers或Writers
在同一套接字上。对象流API可以处理所有Java基本数据类型和所有Serializable类。
我试图发送对象从服务器模块到客户端模块。不幸的是,它抛出错误。有人知道下面的代码有什么问题吗? 来自服务器模块的类 客户端模块中的类看起来相同,但看起来如下所示: 最后一个类,它接受套接字连接:
问题内容: 读取序列化对象时出现错误(java.io.StreamCorruptedException:无效类型代码:00)。这是实现可序列化的类: 这是堆栈跟踪: 有谁知道我如何获得有关该错误的更多信息?还是Java期望哪个对象? 问题答案: 您已经实现了一种递归方法:将实例写入输出流时,它会调用writeObject方法,该方法将写入一个int,然后将该对象写入输出流,再写入一个int,依此类
我正在尝试开发一个Java客户机-服务器应用程序,其中多个客户机可以连接到服务器。我为每个传入的客户机启动一个单独的线程,将客户机套接字传递给该线程,然后打开一对流来维护通信。我得到了这个java。伊奥。StreamCorruptedException-无效的代码类型AC。 根据我的研究,这意味着我使用一个新的ObjectOutputStream来写入现有的ObjectInputStream。然而
我的Android Studio工作正常,但在更新插件后,我得到以下错误。我尝试更新JDK并重新安装Android Studio,但仍然面临同样的错误。 这是同步选项卡错误。 这是构建选项卡错误
问题内容: 大多数Java代码也是语法上有效的Groovy代码。但是,有一些例外使我想到了这个问题: 在Groovy中,Java中哪些构造/功能在语法上无效? 请提供无效的Groovy代码(Groovy 1.6)的Java代码(Java 1.6)的具体示例。 更新: 到目前为止,我们有五个语法上有效的Java代码示例,它们不是有效的Groovy代码: 数组初始化 内部班 是Groovy中的关键字,
问题内容: 我想问问哪段代码在Java中更有效?代码1: 代码2: 我的老师说第二个更好,但我不同意这种观点。 问题答案: 我更喜欢第一个而不是第二个,因为它使循环变量不会影响方法中其余代码。由于它们在循环外部不可见,因此以后不能无意间引用它们。 其他答案也是正确的: 不要 担心这种性能问题。但是,出于代码可读性的原因,并且为了与下一个出现的人交流程序员的意图, 请 考虑一下。这比微优化问题重要得