IOException之后重试Java

时间:2012-09-12 19:30:18

标签: java inputstream ioexception

如果我有流,我有时会抛出一个IOException,并希望捕获异常并重试流将在哪里(即标记仍然在最后一个成功读取块/字节之后) ?我只是捕获异常并执行相同的read(byte[])并且有任何期望我不会丢失数据?感谢。

2 个答案:

答案 0 :(得分:0)

IOExceptions是致命的。你不能指望继续。重试永远不会成功。

答案 1 :(得分:0)

您可以尝试使用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()会将指针设置为上一个位置。