练习增删改查用IO流的时候遇到的问题:
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:3038)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1597)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:482)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:440)
at com.bjpowernode.dao.impl.LendDaoImpl.delete(LendDaoImpl.java:96)
调了好久发现原因是
下面展示一些 错误部分代码
。
try {
ois = new ObjectInputStream(new FileInputStream(PathConstant.LEND_PATH));
oos = new ObjectOutputStream(new FileOutputStream(PathConstant.LEND_PATH));
List<Lend> lendList = (List<Lend>) ois.readObject();
if(lendList.size() != 0){
Lend lend = lendList.stream().filter(l -> l.getId().equals(id)).findFirst().get();
lendList.remove(lend);
}
oos.writeObject(lendList);
}
这里面的错误原因是我将此文件new成了输入流然后又立刻new成了输出流导致的错误,具体细节原因还没找到,但是改成如下代码就没问题了。
try {
ois = new ObjectInputStream(new FileInputStream(PathConstant.LEND_PATH));
List<Lend> lendList = (List<Lend>) ois.readObject();
if(lendList.size() != 0){
Lend lend = lendList.stream().filter(l -> l.getId().equals(id)).findFirst().get();
lendList.remove(lend);
}
oos = new ObjectOutputStream(new FileOutputStream(PathConstant.LEND_PATH));
oos.writeObject(lendList);
}
以后需要注意要写出的时候再去写出,不能提前换成输出流!