1

我正在使用 java 读取大小为 4gb 的 TSV 文件,我想知道 java 是否有办法告诉我在程序运行时它通过任务的距离。我在想文件流可能能够告诉我它读取了多少字节,我可以用它做一些简单的数学运算。

4

3 回答 3

4

普通流或阅读器不计算读取的字节数/字符数。

我想你可能正在寻找ProgressMonitorInputStream.

如果您不想要/不需要 Swing 集成,那么另一种选择是编写 FilterReader 或 FilterInputStream 的自定义子类,它计算读取的字符/字节并提供读取计数的 getter。然后将自定义类放入您的输入堆栈中的适当位置。

于 2012-06-25T04:03:37.583 回答
2

当您从流中读取时,请记录读取的字节数。例如,如果您直接从流中读取字节数组:

    long bytesReadTotal = 0L;
    int bytesRead = stream.read(bytes);
    while (bytesRead != -1) {
        bytesReadTotal += bytesRead;
        // process these bytes ...
        bytesRead = stream.read(bytes)
    }
于 2012-06-25T03:46:58.270 回答
0

如果你通过 HTTP 读取这个文件,有一个名为“Content-Length”的 header 可以告诉你应该读取的总字节数,然后你就知道你正在阅读的进度。

如果你通过TCP/UDP读取文件,我猜你应该同时写客户端和服务器进行文件传输,那么你应该先将文件长度发送给客户端,然后读取文件。

如果你只是读取本地文件,这不是问题。

于 2012-06-25T03:52:26.397 回答