【问题标题】:BufferedReader from only some bytes of InputStream [duplicate]仅来自 InputStream 的某些字节的 BufferedReader [重复]
【发布时间】: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


【解决方案1】:

你可以试试

read(char[] cbuf, int off, int len) 将字符读入数组的一部分。

https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    相关资源
    最近更新 更多