13

我的应用程序不断将大量字节写入文件。如果我的代码块正在写出字节并在与驱动器或网络的连接丢失的情况下获得 IOException,我如何知道它写入了多少字节?

例如,我一次写入 2500 个字节,如果发生 IOException,是否意味着它没有向文件写入任何内容,或者它会将部分字节写入文件?如果部分字节被写入文件我怎么知道写入了多少

仅供参考我正在使用

DataOutputStream

写出文件。我只在我的应用程序关闭时刷新。

4

2 回答 2

6

你不能,IOException任何时候都可能发生。如果您考虑一下,IOException可能是由软件或硬件故障引起的,在写入第一个字节之前,在写入之后但连接发生了一些事情 - 或者如果数据块很大,则在中间。

重新连接后,您必须检查文件大小或使用其他技术使文件保持一致状态并恢复。最简单的安全网:在写入数据之前读取文件大小并可靠存储,写入数据并在写入后读取文件大小。如果发生错误并且当前文件大小不等于预期文件大小(上次保存),则截断多余的字节并重试。

阅读关系数据库中的事务日志,以了解大型和可靠的软件如何处理此类情况。

于 2012-07-26T14:09:42.740 回答
1

这取决于写入失败的方式,但 InterruptedIOException 可能是您正在寻找的:

http://docs.oracle.com/javase/1.4.2/docs/api/java/io/InterruptedIOException.html

它包含一个“bytesTransferred”字段:“报告在中断之前作为 I/O 操作的一部分传输了多少字节。”

于 2012-07-26T14:11:46.363 回答