我正在尝试将.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();
}
然后在两个客户端中使用“保存”方法。
答案 0 :(得分:0)
异常堆栈跟踪在尝试读取对象流标头时显示文件的enf。由此我们可以确定几件事:
C:/Users/Myself/Desktop/Hospital.db
中读取对象时出现问题。编写对象时不会发生这种情况,因为您的问题描述似乎意味着ObjectInputStream.readStreamHeader()
显示流正在尝试读取其标头,因此它发生在文件的开头。流标头通常由2个短值AC ED
和00 05
组成,流中的前4个字节因此,简而言之:您的代码正在尝试从空文件反序列化对象,从而导致您正在观察的异常。