我遇到了一个奇怪的问题,我似乎并不理解。 我正在制作一个从文件中读取数据的程序。但是当我读取数据时,我立即收到EOFException。
所以如果文件是空的,我用.available()检查过。我得到了一个奇怪的结果。 FileInputStream表示文件已填满(249字节),但ObjectInputStream表示该文件为空(或无法读取)。
EOFException:“int signatureSize = ois.readInt();”
FileInputStream fin = new FileInputStream("input(signedbyLK).ext");
System.out.println("fin available: " + fin.available());
ObjectInputStream ois = new ObjectInputStream(fin);
System.out.println("ois avaiable: " + ois.available());
int signatureSize = ois.readInt();
byte[] sigBytes = (byte[]) ois.readObject();
String text = (String) ois.readObject();
ois.close();
编辑:我正在向文件添加内容,如下所示:
File newFile = new File("input(signedbyLK).ext");
newFile.createNewFile();
System.out.println("Succesfully created new file: " + newFile.getName());
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(newFile));
oos.writeObject(sigBytes.length);
oos.writeObject(sigBytes);
oos.writeObject(readInput());
oos.close();
答案 0 :(得分:1)
这是javadoc所说的
任何读取超出边界的对象数据的尝试 由相应的writeObject方法写入的自定义数据将导致 一个以eof字段值为true抛出的OptionalDataException。 超出分配数据末尾的非对象读取将会 以与他们指示数据相同的方式反映数据的结尾 流结束:逐字节读取将返回-1作为字节读取或 读取的字节数,原始读取将抛出EOFExceptions。如果 没有相应的writeObject方法,那么默认结束 序列化数据标志着分配数据的结束。
此外,您需要按照序列化时的顺序读取对象输入流