【发布时间】:2018-06-21 06:04:51
【问题描述】:
我有一个我想同时读取的 InputStream。因此,我做了一些逻辑来找出每个线程的
long start = // byte number for thread to start working on
long end = // byte number for thread to end working on
然后我想要一些方法来进行从字节数开始到字节数结束的计算。我知道我可以在第一部分使用 InputStream.skip(start),但是如何在字节结束后停止进程?
public void logic(long start, long end) {
InputStream is = new FileInputStream(file);
is.skip(start);
doComputation(is);
// stop at is.byteNumber == end - don't know how to do this
is.close();
}
那么……
public void doComputation(is) {
try(BufferedReader br = new BufferedReader(new InputStreamReader(is))) {
//do things line by line
}
}
我们将不胜感激。
【问题讨论】:
-
从 InputStream 中读取会为您提供读取的字节数,您必须自己弄清楚 BufferedReader。
-
使用
FileChannel允许您truly read a part from a file concurrently。然后使用所需的字符集将decode缓冲区转换成字符串。当然,这与“逐行执行”不协调,因为不能保证任意文件字节位置是换行符。
标签: java multithreading concurrency inputstream