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

时间:2014-11-26 16:21:06

标签: java eclipse java-io

我正在尝试将.jAVA程序的数据保存在.db文件中,但是无法正常工作。 出现以下消息错误:

java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source) at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source) at java.io.ObjectInputStream.readStreamHeader(Unknown Source) at java.io.ObjectInputStream.<init>(Unknown Source) at server.server.main(server.java:27) Running

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

“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();
        }   

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

1 个答案:

答案 0 :(得分:0)

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

  • 从文件C:/Users/Myself/Desktop/Hospital.db中读取对象时出现问题。编写对象时不会发生这种情况,因为您的问题描述似乎意味着
  • 跟踪ObjectInputStream.readStreamHeader()显示流正在尝试读取其标头,因此它发生在文件的开头。流标头通常由2个短值AC ED00 05组成,流中的前4个字节
  • 在可以读取流标头之前抛出EOFException这一事实意味着流中的流少于4个字节。我甚至打赌它是空的。它为什么空?如果不了解更多代码,就无法知道

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