Java 从非倒带磁带读取对象

Java 从非倒带磁带读取对象,java,io,Java,Io,我正在将几个可序列化的Java对象写入磁带 当使用回卷设备(/dev/st0)读取写入的对象时,代码可以正常工作,但当使用非回卷设备(/dev/nst0)读取相同的对象时,代码永远不会成功 失败总是发生在第一个readObject()调用中,返回StreamCorruptedException BufferedInputStream bis = new BufferedInputStream ( new FileInputStream( device ), 2*1024*1024

我正在将几个可序列化的Java对象写入磁带

当使用回卷设备(/dev/st0)读取写入的对象时,代码可以正常工作,但当使用非回卷设备(/dev/nst0)读取相同的对象时,代码永远不会成功

失败总是发生在第一个readObject()调用中,返回StreamCorruptedException

BufferedInputStream bis = new BufferedInputStream (
        new FileInputStream( device ), 2*1024*1024 );
ObjectInputStream ois = new ObjectInputStream( bis );
Object oisObject = ois.readObject();
异常:错误消息和相关堆栈跟踪为:

java.io.StreamCorruptedException: invalid stream header: 9AF03B07
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:804)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
java.io.StreamCorruptedException:无效的流头:9AF03B07
位于java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:804)
位于java.io.ObjectInputStream。(ObjectInputStream.java:299)

我希望有人能帮助我理解为什么这种情况只发生在非倒带设备上,也许还能提出解决问题的可能方法。谢谢。

请注意,异常是从
新ObjectInputStream()
引发的,十六进制数告诉您该流的前四个字节是什么。这意味着该设备中的任何内容都不会以
ObjectOutputStream

开头。请注意,异常是从
new ObjectInputStream()
引发的,十六进制数告诉您该流的前四个字节是什么。这意味着该设备中的任何内容都不是以
ObjectOutputStream

开始的。您是否以某种方式验证了从该设备通常可以进行读取,即,只需使用正常的输出流向设备写入大量字节,然后使用输入流再次读取?是的,必须验证基础结构。在这种情况下,磁带机和设备文件可以使用Linux命令和Java输入/输出流正常工作。该问题目前似乎与readObject()无关,并且只能通过非倒带设备解决。此问题中缺少错误消息和堆栈跟踪。是的,我为什么不首先添加这些信息…您是否验证了从该设备进行读取通常是可行的,也就是说,只需使用正常的输出流向设备写入大量字节,然后使用输入流再次读取即可?是的,必须验证基础结构。在这种情况下,磁带机和设备文件可以使用Linux命令和Java输入/输出流正常工作。该问题目前似乎与readObject()无关,并且只能通过非倒带设备解决。此问题中缺少错误消息和堆栈跟踪。是的,我为什么不首先添加它们……感谢您更正引发异常的位置,以及错误消息中有关附加字节的信息。在创建了更多更复杂的测试用例之后,我仍然无法在应用程序之外重现错误。由于这段代码已经并将继续在“st0”中正常运行“数年”(顺便说一句,感谢前面的帮助),我回到“NST”可能有什么不同之处?文件指针有问题吗?我可以使用st0/nst0进行写入,但只能使用st0进行回读。在我的代码中,我发现了先前对对象的“窥视”,从而解释了为什么只有非倒带设备才会引发异常。哦,真丢脸……:)感谢您更正了引发异常的位置,以及错误消息中有关附加字节的信息。在创建了更多更复杂的测试用例之后,我仍然无法在应用程序之外重现错误。由于这段代码已经并将继续在“st0”中正常运行“数年”(顺便说一句,感谢前面的帮助),我回到“NST”可能有什么不同之处?文件指针有问题吗?我可以使用st0/nst0进行写入,但只能使用st0进行回读。在我的代码中,我发现了先前对对象的“窥视”,从而解释了为什么只有非倒带设备才会引发异常。哦,真丢脸……:)