Java 序列化对象InputStream无效流头:00000000

Java 序列化对象InputStream无效流头:00000000,java,caching,serialization,deserialization,objectinputstream,Java,Caching,Serialization,Deserialization,Objectinputstream,对于特定的需求,我必须在不同机器中的几个tomcat实例之间共享简单的Java缓存对象。为了实现这一点,我尝试序列化缓存对象并将其保存在共享目录中。 此缓存对象将在继续执行某些操作之前由所有实例引用[反序列化/读取对象],并在处理操作之后由所有实例更新/覆盖[序列化/写入对象]。 在内部,我将在序列化/反序列化之前创建一个标志文件[empty one],并在序列化/反序列化之后将其删除。所以,如果标志文件可用,则缓存实例正在使用的对象,以便其他实例应等待处理 当负载最小时,它工作,但当负载更高时

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

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

java.io.StreamCorruptedException: invalid stream header: 00000000
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:277)
java.io.StreamCorruptedException:无效的流头:00000000
位于java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
位于java.io.ObjectInputStream。(ObjectInputStream.java:277)

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

顺便说一句,我想避免引入第三方工具并尝试解决方法。@popeye.sailer在这种情况下,最简单的解决方案可能是;a) 使用锁定文件,b)首先写入临时文件,完成后将其重命名为原始文件。是的,这可能是下一次尝试:)