gpt4 book ai didi

java - 为什么没有更多的 Java 代码使用 PipedInputStream/PipedOutputStream?

转载 作者:IT老高 更新时间:2023-10-28 20:33:43 25 4
gpt4 key购买 nike

我最近发现了这个成语,我想知道我是否遗漏了什么。我从未见过它使用过。我在野外使用过的几乎所有 Java 代码都倾向于将数据放入字符串或缓冲区中,而不是像这个示例(例如使用 HttpClient 和 XML API):

    final LSOutput output; // XML stuff initialized elsewhere
final LSSerializer serializer;
final Document doc;
// ...
PostMethod post; // HttpClient post request
final PipedOutputStream source = new PipedOutputStream();
PipedInputStream sink = new PipedInputStream(source);
// ...
executor.execute(new Runnable() {
public void run() {
output.setByteStream(source);
serializer.write(doc, output);
try {
source.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}});

post.setRequestEntity(new InputStreamRequestEntity(sink));
int status = httpClient.executeMethod(post);

该代码使用 Unix 管道样式技术来防止 XML 数据的多个副本保存在内存中。它使用 HTTP Post 输出流和 DOM 加载/保存 API 将 XML 文档序列化为 HTTP 请求的内容。据我所知,它通过很少的额外代码(仅 RunnablePipedInputStreamPipedOutputStream 的几行代码就可以最大限度地减少内存的使用)。

那么,这个成语有什么问题?如果这个成语没有问题,为什么我没看到?

编辑:澄清一下,PipedInputStreamPipedOutputStream 替换了随处可见的样板缓冲区逐个缓冲区副本,它们还允许您同时处理传入数据写出处理后的数据。他们不使用操作系统管道。

最佳答案

来自 Javadocs :

Typically, data is read from a PipedInputStream object by one thread and data is written to the corresponding PipedOutputStream by some other thread. Attempting to use both objects from a single thread is not recommended, as it may deadlock the thread.

这可以部分解释为什么它不被更常用。

我认为另一个原因是许多开发人员不了解它的目的/好处。

关于java - 为什么没有更多的 Java 代码使用 PipedInputStream/PipedOutputStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/484119/

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