java - 从 FileChannel 读取所有行到字符串流

标签 java java-8 java-stream nio

对于我的特定任务,我需要从 FileChannel 中读取数据到 Stream (或 Collection )属于 String的。

在常规 NIO对于 Path我们可以使用一个方便的方法Files.lines(...)返回 Stream<String> .我需要得到相同的结果,但是来自 FileChannel而不是 Path :

public static Stream<String> lines(final FileChannel channel) {
//...
}

有什么办法吗?

最佳答案

我假设您希望在返回的 Stream 关闭时关闭 channel ,所以最简单的方法是

public static Stream<String> lines(FileChannel channel) {
    BufferedReader br = new BufferedReader(Channels.newReader(channel, "UTF-8"));
    return br.lines().onClose(() -> {
        try { br.close(); }
        catch (IOException ex) { throw new UncheckedIOException(ex); }
    });
}

它实际上不需要 FileChannel 作为输入,ReadableByteChannel 就足够了。

注意,这也属于“regular NIO”; java.nio.file 有时是 referred to as “NIO.2” .

关于java - 从 FileChannel 读取所有行到字符串流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44544945/

相关文章:

java - 如何在数组:中查找包含相等总和的子集

java - PHP JSON 到 Java 由于不可见字符而无法解析

java - com.jayway.jsonpath.InvalidPathException : Invalid path $myVar. ID

gradle - Jenkins jacoco插件-Java8仪表板报告已消失

lambda - java 8 lambda toMap 显示类型转换错误

java - 寻找用于范围计算的良好 Java IPV6 库

java - Java 中的并发性 : synchronized static methods

Java Stream按一个属性分组并按另一个属性收集最大元素

Java 8 Stream - 在下一行完成映射后是否可以使用对象?

java - 与 Java 流的一对一映射