问题标签 [objectinputstream]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java反序列化:从缓冲区读取时如何知道何时到达对象的末尾?
我试图想出一个好的标题,但似乎失败了。这是我的问题:
我正在从套接字读取数据。缓冲区中包含的数据是一个序列化的对象。一旦数据被完全读取,我就可以创建一个 ObjectInputStream 并使用 readObject 来读取数据。
我的问题是,因为我的套接字类正在读取字节......我怎么知道我什么时候收到了完整的对象?对象指示器似乎没有结束,我尝试寻找序列化字节码的突破以查看是否可以找到长度字段,但序列化字节码在谷歌可以找到的任何地方都没有得到很好的解释。
我收到的对象是哈希映射(java.util.Map),如果这有区别的话。
这是我正在使用的部分代码:
所以,我的问题是,当我阅读 m_DataIn 时,我如何确定我已经到达对象的末尾?
注意:我不能以任何方式修改我从中接收这些对象的服务器。这不是我的代码。
谢谢。
查尔斯。
java - 使用 BufferedOutputStreams 时 ObjectInputStream 不会初始化
我正在尝试通过套接字发送对象以进行游戏,但它们需要很长时间才能发送并且可能导致游戏挂起。我想使用 BufferedOutputStreams 和 BufferedInputStreams 来发送数据,但是当我在客户端使用 BufferedOutputStream 时,我的 ObjectInputStream 不会在服务器端初始化。奇怪的是没有抛出任何错误。
我只提供所涉及的代码,因为要花很长时间来解释发生了什么。每个游戏初始化两个客户端。
我已经浏览了所有论坛,但找不到任何有用的东西,这让我认为我正在做一些非常新手的事情。谢谢你提供的所有帮助!
java - 如何从单个文件中保存多个对象?
我希望我的应用程序在本地存储多个对象以供以后使用。
现在,我的问题是我知道如何ObjectInputStream
通过获取整个文件(federations.dat)来加载对象。有没有办法让我object WHERE id = N
从“federations.dat”加载说?还是我必须为每个对象创建单独的文件?
这是我的加载方法:
有什么建议吗?
java - FileOutputStream 上的 java.io.EOFException
我有一个类可以读取 Student[] 数组对象的书面输出
这是代码
问题是读取时出现错误Student[] studs = (Student[]) fileReader.readObject();
如此处所述
关于可能是什么问题的任何想法?提前致谢..
这就是students_updated.dat
写的
ObjectInputStream
在此方法所在的构造函数中声明
java - 每次都必须重新创建 ObjectOutputStream
我见过一些人问过类似的问题,但任何人发布的唯一答案是你不应该这样做。
但我已经对它进行了两种方式的测试 - 它只能以这种方式工作。
服务器端
客户端
这整天有效。
但如果我把它改成这个——
(我在代码的更远处创建了输入和输出流)
然后我第一次从服务器成功接收到正确的数据 - 但此后每次 - 我只收到相同的数据而不是更新的数据,并且没有错误说明原因。
java - 反复写入 ObjectInputStream
我有多个客户端和一台服务器。服务器在一个线程中处理每个客户端。客户端必须向主服务器发送一个自定义对象。我检查了this和this,它们谈到了java.io.StreamCorruptedException: invalid type code: AC
我所遇到的错误。
但我不理解建议的解决方案。他继承了 ObjectOutputStream 并且在必须发送对象的第二次及以后的时间中不写入标头。这对我不起作用。
是否有另一种通过 TCP 套接字发送自定义对象的解决方案?我的客户每 10 秒收集一次数据并重新创建发送的对象。
如果我重复,我很抱歉,我正在阅读很多类似的问题,但找不到我的场景的答案。
提前致谢
编辑
发送方法(在客户端)
收到
java - 尝试从 ObjectInputStream 读取时 Android 中的 ClassCastException
我正在处理的 android 应用程序有问题。我通过 Wi-Fi 连接了两部手机,并使用ObjectOutputStream
/将自定义序列化类从一部手机传递到另一部手机ObjectInputStream
。两部手机上的课程是相同的,但是当我尝试在一部手机上阅读时,我得到了ClassCastException
.
我读入了对象和发生错误的行:
这是我写出的方式sMessage
:
这是我的sMessage
课:
我在两部手机上都有这门课,正如我所说的,它们是相同的,所以我不太清楚为什么我会得到一个ClassCastException
.
如果有更多信息会有所帮助,我很乐意发布并感谢任何帮助。
java - 从 SignedObject 获取时出现 InvalidObjectException
我正在使用 ObjectInputStream 通过 TCP 连接发送封装在 SignedObject 中的 Message 对象中的对象。这是基本代码:
发送
收到
Message 类是一个基本类,只有字段,没有方法。其中一个字段是 Object Message.data,在本例中包含 siena.Filter 或 siena.Notification。当我调用 SignedObject.getObject() 时,我得到一个 InvalidObjectException。堆栈跟踪如下。
消息传输的代码是正确的。它适用于其他类的许多其他情况,甚至适用于同一类的其他版本。它不适用于特定版本的 siena.Filter 和 siena.Notification。
我可以看到正在发送的类的 readObject() 方法(siena.Filter 或 siena.Notification)正在被调用,但我不知道这是否应该发生。我知道在 siena 方法中抛出了一个异常,我猜这会导致 InvalidObjectException。
所以问题是,是 siena.class.readObject() 抛出异常并且没有正确写入的问题,还是 siena.class.readObject() 被调用的问题?如果是后者,我将如何解决这个问题?
谢谢,大卫
java - ObjectInputStream 给了我一个空对象(但读取的文件不是空的)
我有这个可序列化的类,我用它在二进制文件中存储字符串的 ArrayList。
一旦这个数组充满了我必须存储的数据,我就使用这种方法来存储带有字符串数组列表的实例:
最后,我在我的应用程序的初始化中使用此方法来加载文件并用以前存储的数据填充我的 SaveState.instance 变量:
当我保存数据时,正在使用数据对象填充正确创建文件,我知道这是因为文件有超过 0KB 的磁盘空间。但是这里出了点问题,因为当我启动我的应用程序并加载数据时,我的 SaveState.instance 变量得到一个空的 ArrayList 字符串......然后¿代码有什么问题?
谢谢
java - ObjectInputStream readObject(): ClassNotFoundException
在客户端和服务器类中,我都有一个完全相同的内部类,称为 Data。此 Data 对象正在使用以下方式从服务器发送:
(其中 d 是一个数据对象)
此对象在客户端接收并转换为 Data 对象:
我java.lang.ClassNotFoundException: TCPServer$Data
在这条线上得到一个Object receiveObject = input.readObject();
我的猜测是它试图在服务器端查找 Data 类并且找不到它,但我不确定......我该如何解决这个问题?