Java FileInputStream.available()返回字节,但ObjectInputStream.available()返回0
我遇到了一个奇怪的问题,我似乎不明白。 我正在制作一个从文件中读取数据的程序。但当我读取数据时,我立即收到一个EOFEException 所以我用.available()检查了文件是否为空。我得到了一个奇怪的结果。FileInputStream表示文件已填充(249字节),但ObjectInputStream表示文件为空(或无法读取) EOFEException位于:“int signatureSize=ois.readInt();” 编辑:我正在向文件添加内容,如下所示:Java FileInputStream.available()返回字节,但ObjectInputStream.available()返回0,java,file,stream,inputstream,objectinputstream,Java,File,Stream,Inputstream,Objectinputstream,我遇到了一个奇怪的问题,我似乎不明白。 我正在制作一个从文件中读取数据的程序。但当我读取数据时,我立即收到一个EOFEException 所以我用.available()检查了文件是否为空。我得到了一个奇怪的结果。FileInputStream表示文件已填充(249字节),但ObjectInputStream表示文件为空(或无法读取) EOFEException位于:“int signatureSize=ois.readInt();” 编辑:我正在向文件添加内容,如下所示: Fi
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();
下面是javadoc所说的 试图读取超出对象边界的对象数据 由相应writeObject方法写入的自定义数据将导致 要在eof字段值为true时引发的OptionalDataException。 超过分配数据末尾的非对象读取将被删除 以与指示数据结尾相同的方式反映数据结尾 流结束:字节读取将返回-1作为字节读取或 读取的字节数,并且原语读取将引发EOFEException。如果 没有相应的writeObject方法,则默认结束 序列化数据标记分配数据的结束
此外,您需要按照序列化对象输入流时的顺序读取对象输入流我已经编辑了我的问题。现在您可以看到我填充文件的顺序。您的读调用甚至与写调用不对应。你的第一次写调用是一个对象,但你的第一次读是一个intWow,我甚至没有注意到这一点。非常感谢。
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();