Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FileInputStream.available()返回字节,但ObjectInputStream.available()返回0_Java_File_Stream_Inputstream_Objectinputstream - Fatal编程技术网

Java FileInputStream.available()返回字节,但ObjectInputStream.available()返回0

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

我遇到了一个奇怪的问题,我似乎不明白。 我正在制作一个从文件中读取数据的程序。但当我读取数据时,我立即收到一个EOFEException

所以我用.available()检查了文件是否为空。我得到了一个奇怪的结果。FileInputStream表示文件已填充(249字节),但ObjectInputStream表示文件为空(或无法读取)

EOFEException位于:“int signatureSize=ois.readInt();”

编辑:我正在向文件添加内容,如下所示:

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