2016-12-06 3 views
5

(私は理解していないので、「奇妙な」)今日は、私がLinuxの共有ディレクトリからオブジェクトをシリアライズおよびデシリアライズされたJavaのシリアライズとデシリアライズに奇妙な行動を越えどのくらいのディスク容量がJavaを引き起こす可能性がありますか。 io。 EOFExceptionでは

が来ています。 すべてをシリアル化しても問題なく動作しましたが、同じファイルをデシリアライズしようとしたときには java. io. EOFExceptionがスローされます。また、デシリアライズは、この新しく作成されたファイルでのみ失敗し、そのディレクトリ内の他のすべての古いファイルで動作していました。

私はインターネットを検索し、低ディスク容量が原因でこのエラーが発生する可能性があるスレッドを検出しました。

私はいくつかの一時ファイルを整理し、それがうまくいったのです。私は、ディスクの空き容量がシリアル化されていないシリアル化にのみ影響することは理解できませんか?

私はApacheのコモンSerializationUtilsクラスを使用しています。以下は、誰かがこの動作を説明することができればそれは本当に参考になる

SerializationUtils. serialize(myObject, new FileOutputStream(new File(sharePath+FILEName) ; 


MyObject object=SerializationUtils. deserialize(new FileInputStream(new File(sharePath+FILEName); 

シリアル化および逆シリアル化のためのコードがあります。 SerializationUtilsのバグがIOExceptionを突き詰めている可能性があります。

おかげ

+0

ファイルを書き込むときに以前の 'IOException'を無視しない限り、できません。 – EJP

+0

私は手作業でシリアル化を行っていないので、IOExceptionはSerializationUtilsによって管理されます。そのjavadocにあります。 –

+0

それは彼らの問題、またはその貧弱なAPIの設計です。 – EJP

答えて

7

私の疑惑は、ファイルを書き込む際には、IOExceptionがディスク領域が不足したためにスローされますが、シリアライズされたデータの先頭には、まだディスクに書き込まれたことがあります。これは、ディスクに格納されたシリアル化されたデータが不完全であることを意味するため、無効な結果が得られます。この場合、EOF例外が発生します。

この問題を解決するには、ディスク容量がexception.getMessage()でなくなったためにスローされ、不完全なデータを書き込まないようにしてください。

+0

MはApacheのコモンズを使用していて、あなたのクレームの証拠を見つけることができませんでした。もしあなたが何かを見つけたら、私はApacheのSerializationUtilsでIOExceptionを見つけています。 –

+0

SerializationExceptionをキャッチしようとしていますか?ファイルを書き込むとIOExceptionがスローされると、IOExceptionではなくスローされます –

関連する問題