繁体   English   中英

从IOException恢复:网络名称不再可用

[英]Recovering from IOException: network name no longer available

我正在尝试读取一个大的(700GB)文件并逐步处理它,但我正在处理的网络偶尔会关闭,切断对该文件的访问。 这会抛出一个java.io.IOException告诉我“指定的网络名称不再可用”。 是否有一种方法可以捕获此异常并等待,例如,十五分钟,然后重试读取,或者一旦访问该文件丢失,读取器对象是否会被炒掉?

如果连接丢失后读取器变得无用,有没有办法可以重写这个,以便让我“保存我的位置”,然后从那里开始阅读,而不必阅读和丢弃所有之前的数据呢? 即使只是在没有处理数据的情况下咀嚼数据也需要花费很长时间才能完成500GB的数据。

目前,代码看起来像这样(为简洁起见编辑):

class Processor {
    BufferedReader br;

    Processor(String fname) {
        br = new BufferedReader(new FileReader("fname"));
    }

    void process() {
        try {
            String line;
            while((line=br.readLine)!=null) {
                ...code for processing the line goes here...
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

感谢您的时间。

您可以跟踪变量中的读取字节。 例如,我在这里跟踪一个名为read的变量,buff就是char []。 不确定使用readLine方法是否可行。

read+=br.read(buff);

然后,如果您需要重新启动,则可以跳过那么多字节

br.skip(read);

然后你可以继续处理。 祝好运

我怀疑在此错误之后底层fd仍然可用,但您必须尝试它。 更可能的是,您将不得不重新打开该文件并跳到您所处的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM