2016-04-30 20 views
0

私はいくつかのSerializable 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) 

アム誰かがこれが唯一の非巻き戻しデバイスで発生している理由を私は理解するのに役立つことができるかもしれないことを期待し、そしておそらくこの問題に対する可能な救済策も示唆している。ありがとうございました。

+0

このデバイスから一般的に読み取りが正常に動作していることを確認しましたか?つまり、デバイスに通常の出力ストリームで1トンのバイトを書き込み、入力ストリームでもう一度読み込むだけですか? – Harald

+0

はい、インフラストラクチャの検証は必須です。この場合、テープドライブとデバイスファイルは、LinuxコマンドとJava入出力ストリームを使用して正しく機能します。現在のところ、この問題はreadObject()に分離されているようで、巻き戻しされないデバイスを介してのみ発生します。 – Brett

+0

この質問には、エラーメッセージとスタックトレースがありません。 – EJP

答えて

0

例外はnew ObjectInputStream()からスローされ、16進数はそのストリームの最初の4バイトが何であるかを示します。つまり、そのデバイスに含まれるものはどれも、ObjectOutputStreamで始まらないことを意味します。

+0

例外がスローされている場所とエラーメッセージの追加バイトに関する情報を修正していただきありがとうございます。追加の複雑なテストケースを作成した後も、アプリケーション外でエラーを再現することはできません。このコードは "年" [リンク](https://community.oracle.com/thread/1144817)(以前のヘルプ、btwのおかげで)の "st0"で正しく機能しています。 「nst0」と異なる可能性がありますか?ファイルポインタで何か?どちらのst0/nst0でも書き込むことができますが、st0だけを読み戻すことができます。 – Brett

+0

私のコードでオブジェクトの以前の "ピーク"が見つかったため、巻き戻し以外のデバイスだけが例外をスローしていた理由を説明しています。ああ、恥... ... :) – Brett

関連する問題