问题标签 [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.

0 投票
1 回答
369 浏览

android - 在我的应用程序的较新市场版本中无法正确读取存储的(持久的)可序列化对象

我有一个 android 应用程序,它存储包含 4 个字符串数组列表的持久可序列化对象。该对象存储在内存中,每次应用启动时都会恢复。它工作正常....问题是当我在市场上推出新版本的应用程序并且用户下载并安装更新版本时,存储的对象没有正确恢复,对象的四个数组列表恢复为空. 然后,用户丢失了他们以前版本的应用程序存储数据。这是一个我必须解决的大问题。

这是我的可序列化对象:

这些是我用来存储和恢复这个持久对象的方法:

请记住,如果应用程序的版本未更新,则此代码可以正常工作。

怎么了?我应该怎么做才能使这些数据在我的应用程序的不同 android 市场版本之间持久存在?

谢谢

0 投票
2 回答
422 浏览

java - ObjectInputStream catch 块产生EOFException?

很抱歉把它拖上来,但我环顾四周,我仍然不断收到 EOFException。我已经评论了我的方法中的所有内容,除了:

我要做的就是将文件、txt 或 mp3 从服务器传递到客户端 - 我什至没有尝试调用readObject()ObjectInputStream,但我仍然得到 EOFException?我怎样才能到达我没有尝试阅读的文件的末尾?实际上,我希望我尝试逐行读取文本文件,因为我知道如何做到这一点非常好。我只想接收一个对象,将其转换为文件并将其写入文件系统,但由于某种原因我的 catch 块:

打印出来:

传入数据分配错误:java.io.EOFException

我一直在尝试遵循此论坛帖子中列出的服务器代码。基本上从服务器我使用以下几行将文件写入客户端:

如果有人能解释如何解决我觉得愚蠢的错误,我将不胜感激 - 提前致谢!

0 投票
1 回答
233 浏览

java - StreamCorruptedException 与 ObjectInputStream 上的大量数据

我有一个基于 TCP 的服务器-客户端设置,其中客户端向服务器发送了许多数据集。读/写使用 ObjectInput/OutputStream。在正常情况下我没有任何问题,但是当数据流变大时,我得到了 StreamCorruptedException: invalid type code。无效代码每次都不一样。我打开套接字一次并调用同步方法从多个线程发送数据。

客户:

服务器:

更新:我在每次发送后添加了 out.reset() ,但这对问题没有帮助。我还在循环中添加了睡眠语句以降低数据速率。这消除了错误,但不是真正的解决方案。

编辑:所以自从我最初提出这个问题以来已经有一段时间了,但我又遇到了这个问题。我尝试设置我的系统,以便在每条发送消息后,线程等待“确认”消息作为回报。如果接收进程有 StreamCorruptedException,它会发回“重新发送”而不是 ack。这似乎导致的问题多于解决方案。还有其他想法吗?

0 投票
1 回答
347 浏览

java - 线程 objectoutputstream objectinputstream 阻塞不读取

我的代码有问题;看起来相当简单的对象写入和读取操作,似乎永远不会触发它的辅助操作。远程对等点上的内部类线程ConcurrentHashMap通过 OOS 发送一个。

当它到达时 - 它确实,好的 - 接收代码继续,在一个布尔确定的循环中,在 OIS 上侦听该 CCHM 的更新。这些更新来自发送原始 CCHM 的同级(每个接收对等方有一个服务同级)。这些ObjectOutputStreams兄弟姐妹的使用取自兄弟姐妹的可见HashMap。兄弟姐妹们并不关心他们是发送给该组的新成员,还是发送给现有成员。对等点是新的还是现有的差异仅在接收对等端知道,原始 CCHM 被接收和使用,然后代码继续等待同一 OIS 上的更新。加入的新对等点将其详细信息添加到远程Hashtable,因此每次发送给所有对等点(新的,加上现有的 n 个),要发送的 CCHM 都会大一个元素。

但是现有的对等体没有收到更新的 CCHM。我没有用调用填充我的代码System.out.println()或粗暴地停止它,而是我可能忽略了哪些陷阱来陷入这种混乱?

0 投票
1 回答
4757 浏览

java - 使用 ObjectInputStream 从资产中读取二进制文件

我最近决定将我的 3d 模型格式转换为二进制文件而不是 ASCII,以期提高速度......我阅读了一些 java 教程,阅读我的格式的最简单方法似乎是使用 ObjectInputStream 和readLong() 和 readFloat() 命令的混合......但我似乎无法让代码工作......

这是我的测试代码:

在这个例子中,我只是试图从文件中读取第一个 LONG,但总是抛出 IOException,我不知道该怎么做才能解决这个问题。

任何帮助都会很有用。


快速添加:堆栈跟踪错误输出:

0 投票
4 回答
1428 浏览

java - Java序列化 - 进程崩溃后恢复序列化文件

我有以下用例。

  • 进程将某些对象序列化为使用BufferedOutputStream.
  • 写完每个对象后,进程调用flush()
  • 用例是如果进程在写入对象时崩溃,我想将文件恢复到已成功写入的前一个对象。

我怎样才能反序列化这样的文件?反序列化此类文件时 Java 将如何表现。

  • 它会成功反序列化到崩溃前成功写入的对象吗?
  • 在读取最后一个部分写入的对象时,会发生什么行为。我怎样才能检测到呢?

更新1 -

  • 我试图通过在写入对象时手动终止进程来模拟进程崩溃。我已经尝试了大约 10-15 次。每次我能够反序列化文件并且文件没有任何部分对象。

我不确定我的测试是否足够详尽,因此需要进一步的建议。

Update2 - Adam 指出了一种可以使用随机截断文件来模拟此类测试的方法。以下是尝试大约 100 次迭代时观察到的行为 -

  • 从截断的文件(应该相当于进程崩溃时文件的条件),Java可以成功读取到最后一个完整的对象。
  • 在到达最后一个部分写入的对象时,Java 不会抛出任何StreamCorruptedExceptionIOException. 它只是抛出EOFException指示EOF并忽略部分对象。
0 投票
2 回答
997 浏览

java - 我无法通过 Java 中的套接字发送对象

我有这个问题,我无法弄清楚什么是错的。我在整个互联网上进行了搜索,但没有成功。

所以,我必须通过 Java 中的套接字发送一个对象,但我不知道该怎么做。我尝试了很多方法。我序列化了对象,我尝试直接写对象。但似乎没有任何效果。

细节是我有一个并行运行的聊天。有时当我打开 ObjectOutputStream 或 ObjectInputStream 时,我会陷入死锁。我想你们可以帮助我。

这是一个客户端连接到服务器的刽子手游戏,服务器应该向客户端发送一个随机单词,这是一个对象。

服务器:

客户:

0 投票
1 回答
1942 浏览

java - 获取 ObjectInputStream 以查看不同的对象

我正在制作一个服务器-客户端应用程序。我的应用程序有两个部分,聊天部分和游戏部分。当我聊天时,我发送 String 对象,当我玩游戏时,它发送 Game 对象到另一台计算机。我怎样才能让我的 ObjectInputStream 看到这两种对象之间的区别。我一直在尝试这样的事情:

当我想使用游戏对象时,它会抛出 NotSerializableException,但是聊天部分正在工作。

0 投票
1 回答
323 浏览

java - objectInputStream 总是从可序列化的类中读取第一个实例

我制作了一个实现可序列化的类。当我通过我的服务器-客户端应用程序接收它的对象时,我只得到它的第一个实例,那么无论对象被修改多少次,objectInputStream 只接收第一次发送的那个。为什么?

这实际上是一个摇摆应用程序在我的应用程序上同时运行一个聊天部分和一个游戏部分。

面板将我的游戏对象发送到服务器/客户端对象

服务器或客户端部分在线程上运行

它从游戏部分或聊天部分读取数据,聊天部分工作正常

gameclass 只是一个简单的类,具有一些 String 属性和实现 Serializable

0 投票
4 回答
3177 浏览

java - 我应该在何时何地使用 close() 方法来避免 ObjectInputStream 中的 IOException?

我正在尝试通过 tcp 从客户端程序中读取对象。正如您在这一行中看到的,我创建了 objectInput:

然后从另一个程序中读取我的输入。它曾经工作正常,直到我做了一些小改动来清理程序。个人假设我添加了

我的问题是,在读取对象后,我应该关闭 objectInputStream 还是保持不关闭?我应该在使用后立即关闭它还是在 if 块结束时或程序结束时关闭它?关闭有什么影响?顺便说一句,我已经阅读了关闭文档。

这是错误:

这是我的代码: