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