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