2

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

4

2 回答 2

1

您可以尝试使用jcabi-aspectsmark()中的使用/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)如果在调用时抛出 IOExceptionmark()将不会发生,并且下一次调用reset()会将指针设置为前一个位置。

于 2013-03-24T07:31:23.073 回答
0

一些 IOExceptions 是致命的,你不能指望继续。确保连续重试可能成功。(即检查手头的异常是否可恢复。)

于 2012-09-12T19:33:43.657 回答