序列化ObjectInputStream无效的流标头:00000000

时间:2014-09-24 06:38:55

标签: java caching serialization deserialization objectinputstream

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

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

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

1 个答案:

答案 0 :(得分:1)

通过文件共享数据可能很难实现。您可以考虑使用Chronicle Map来设置在进程之间共享持久数据,但不以线程安全的方式创建和删除文件。