2

ストリームが時々スローされる可能性がありIOException、例外をキャッチして再試行したい場合、ストリームはどこにありますか(つまり、マークは最後に正常に読み取られたブロック/バイトの後にありますか)?例外をキャッチして同じことを実行するだけで、read(byte[])データが欠落しないと期待できますか? ありがとう。

4

2 に答える 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 に答える