java - 序列化ObjectInputStream无效流 header : 00000000

标签 java caching serialization deserialization objectinputstream

对于特定要求,我必须在不同计算机中的多个 tomcat 实例之间共享简单的 Java 缓存对象。为了实现这一点,我尝试序列化缓存对象并将其保存在共享目录中。 在继续执行某些操作之前,所有实例将引用[反序列化/读取对象]此缓存对象,并在处理操作后由所有实例更新/覆盖[序列化/写入对象]。 在内部,我将在序列化/反序列化之前创建一个标志文件[空一个],并在序列化/反序列化之后将其删除。因此,如果标志文件可用,则缓存实例正在使用的对象,因此其他实例应该等待处理。

当负载最小时它可以工作,但是当负载较高时我开始得到 .我相信这可能是因为僵局。有没有办法确保单个文件的同时处理不会导致此问题。我不能使用 Java 同步,因为它特定于实例。非常感谢您的帮助。

java.io.StreamCorruptedException: invalid stream header: 00000000
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:277)

最佳答案

通过文件共享数据可能很难做到正确。您可能会考虑使用 Chronicle Map其设计用于在进程之间共享持久数据,但不以线程安全的方式创建和删除文件。

关于java - 序列化ObjectInputStream无效流 header : 00000000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26010179/

相关文章:

java - 保存hashmap结构java

sorting - 排序redis缓存

c# - 序列化和反序列化 Visual Studio 解决方案文件 - 还是以编程方式编辑?

c# - 序列化问题

java - CAS Rest API 总是导致 HTTP 状态 415

java - GWT:将客户端和服务器端分成不同的 WAR

java - 远程分析 JVM

java - spring boot缓存redis,key有\xac\xed\x00\x05t\x00\x06

php - 使用 PHP + MySQL 缓存大量内容

c# - Newtonsoft.Json : DeserializeObject(string value, 类型 type) 返回 JObject