我正在使用java来读取大小为4GB的TSV文件,我想知道java是否有办法告诉我程序运行时通过任务的距离。我想文件流可能能告诉我它读了多少字节,我可以做一些简单的数学运算。
答案 0 :(得分:4)
普通流或读取器不计算读取的字节数/字符数。
我想你可能在寻找ProgressMonitorInputStream
。
如果您不想/需要Swing集成,那么另一种选择是 编写FilterReader或FilterInputStream的自定义子类,计算读取的字符/字节数,并提供读取计数的getter。然后在适当的位置将自定义类放入输入堆栈。
答案 1 :(得分:2)
从流中读取时,请保持读取的字节数。例如,如果直接从流中读取字节数组:
long bytesReadTotal = 0L;
int bytesRead = stream.read(bytes);
while (bytesRead != -1) {
bytesReadTotal += bytesRead;
// process these bytes ...
bytesRead = stream.read(bytes)
}
答案 2 :(得分:0)
如果您通过HTTP读取此文件,则有一个名为“Content-Length”的标题可以告诉您应该读取的总字节数,然后您就会知道阅读时的进度。
如果你通过TCP / UDP读取文件,我想你应该写客户端和服务器进行文件传输,然后你应该首先将文件长度发送到客户端,然后读取文件。
如果您只是阅读本地文件,这不是问题。