将数据保存在.db文件中-java.io.file

将数据保存在.db文件中-java.io.file,java,eclipse,java-io,Java,Eclipse,Java Io,我正在尝试将JAVA程序的数据保存在.db文件中,但不起作用。 出现以下错误消息: “java.io.EOFException 在java.io.ObjectInputStream$PeekInputStream.readFully处(未知源) 位于java.io.ObjectInputStream$BlockDataInputStream.readShort(未知源) 位于java.io.ObjectInputStream.readStreamHeader(未知源) 位于java.io.Obj

我正在尝试将JAVA程序的数据保存在.db文件中,但不起作用。 出现以下错误消息:

java.io.EOFException
在java.io.ObjectInputStream$PeekInputStream.readFully处(未知源)
位于java.io.ObjectInputStream$BlockDataInputStream.readShort(未知源)
位于java.io.ObjectInputStream.readStreamHeader(未知源)
位于java.io.ObjectInputStream。(未知源)
位于server.server.main(server.java:27)
正在运行

我的程序是一个使用JavaRMI的客户机-服务器模型。我有两个客户端,两个接口,然后是多个类,包括一个服务器类和一个包含所有方法的实现类

“save”方法位于实现类中,如下所示:

    public void save() {
    ObjectOutputStream out;
    try {
        out = new ObjectOutputStream(new FileOutputStream(new java.io.File("C:/Users/Myself/Desktop/Hospital.db")));
        out.writeObject(this);
        out.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }       
}
在服务器类中:

try {
        ObjectInputStream in;
        try {               
            in = new ObjectInputStream(new FileInputStream(new java.io.File("C:/Users/Myself/Desktop/Hospital.db")));
            read = (implementation)in.readObject();
            in.close();
            System.out.println(read);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            read = new implementation();
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            read = new implementation();
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            read = new implementation();
            e.printStackTrace();
        }   

然后在两个客户端中使用“save”方法。

在尝试读取对象流头时,异常堆栈跟踪显示文件的enf。由此我们可以确定以下几点:

  • 从文件
    C:/Users/imf/Desktop/Hospital.db
    读取对象时出现问题。它不会像您的问题描述所暗示的那样在编写对象时发生
  • 跟踪
    ObjectInputStream.readStreamHeader()
    显示流正在尝试读取其头,因此它发生在文件的开头。流头通常由两个短值组成,即流中的前4个字节
    AC ED
    00 05
  • 在读取流头之前抛出EOFEException意味着流中的字节数少于4个。我甚至打赌它是空的。为什么是空的?如果没有看到更多的代码,就不可能知道

因此,简而言之:您的代码试图从空文件反序列化对象,导致您观察到的异常。

据我所知,您正在从文件读取,而不是写入。我认为在客户端完成写入文件之前,服务器可能正在尝试读取该文件。非常感谢!我现在明白了