gpt4 book ai didi

java - 关闭 Stream 是否会关闭 BufferedReader 源?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:44:49 25 4
gpt4 key购买 nike

来自 the docs :

Streams have a BaseStream.close() method and implement AutoCloseable, but nearly all stream instances do not actually need to be closed after use. Generally, only streams whose source is an IO channel (such as those returned by Files.lines(Path, Charset)) will require closing. Most streams are backed by collections, arrays, or generating functions, which require no special resource management. (If a stream does require closing, it can be declared as a resource in a try-with-resources statement.)

当我创建 Stream<String>使用 lines() BufferedReader 上的方法如下所示,是否关闭 Stream同时关闭 BufferedReader

try (Stream<String> lines = new BufferedReader(new InputStreamReader(process.getInputStream())).lines()) {
// Do stuff
}

// Is the BufferedReader, InputStreamReader and InputStream closed?

一些非常快速的测试我试过说不(inBufferedReader 字段不是 null ),但是我被下面的句子弄糊涂了,因为这个例子是 I/O 作为嗯,对吧?

Generally, only streams whose source is an IO channel (such as those returned by Files.lines(Path, Charset)) will require closing.

如果不是,我需要关闭两个实例,还是关闭 BufferedReader够了吗?


理想情况下,我想返回一个 Stream<String>通过某种方法,无需客户担心读者。目前,我创建了一个 Stream装饰器,它也会关闭阅读器,但如果没有必要这样做会更容易。

最佳答案

如果你想将读取器的关闭延迟到传递的流,你需要调用 Stream.onClose() :

static Stream<String> toStream(BufferedReader br){
return br.lines().onClose(asUncheckedAutoCloseable(br));
}


static Runnable asUncheckedAutoCloseable(AutoCloseable ac) {
return () -> {
try {
ac.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
};
}

关于java - 关闭 Stream 是否会关闭 BufferedReader 源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30862577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com