ストリームが時々スローされる可能性がありIOException
、例外をキャッチして再試行したい場合、ストリームはどこにありますか(つまり、マークは最後に正常に読み取られたブロック/バイトの後にありますか)?例外をキャッチして同じことを実行するだけで、read(byte[])
データが欠落しないと期待できますか? ありがとう。
質問する
2096 次
2 に答える
1
jcabi-aspects のmark()
/reset()
メソッド、AOP、および Java アノテーションの使用を試すことができます(私は開発者です)。読み取る関数は次のようになります (疑似コード)。
@RetryOnFailure(attempts = 5)
private byte[] read(InputStream stream, int length) {
stream.reset();
byte[] bytes = new byte[length];
stream.read(bytes, 0, length);
stream.mark(length);
return bytes;
}
stream.read(bytes, 0, length)
への呼び出しで IOException がスローされた場合はmark()
発生せず、次の への呼び出しreset()
でポインターが前の位置に設定されます。
于 2013-03-24T07:31:23.073 に答える
0
一部の IOExceptions は、続行することが期待できない致命的です。連続した再試行が成功することを確認してください。(つまり、手元の例外が回復可能かどうかを確認します。)
于 2012-09-12T19:33:43.657 に答える