gpt4 book ai didi

java - Freemarker 中的管道流问题

转载 作者:行者123 更新时间:2023-11-29 08:17:18 31 4
gpt4 key购买 nike

我需要在 freemarker 中加载和处理模板。我正在使用管道流来读回 freemarker 生成的结果。

示例代码:

PipedInputStream pi = new PipedInputStream();
PipedOutputStream po = new PipedOutputStream(pi);
Writer writer = new OutputStreamWriter(po);
configuration.getTemplate("xx").process(rootMap, writer);

问题是有时它在 freemarker procsss 方法中卡住。没有错误,没有异常,但它没有从 process 方法返回。

如果我将管道流转换为 ByteArray 流,它工作正常。

我是否以正确的方式使用管道流?

最佳答案

不,管道流设计用于在两个线程之间传递数据。管道两端之间只有一个小缓冲区。如果您写入管道输出流,如果缓冲区已满,您的线程将被阻塞,直到另一个线程从相应的管道输入流中读取。这不适用于一个线程。

来自 Javadoc:

Typically, data is read from a PipedInputStream object by one thread and data is written to the corresponding PipedOutputStream by some other thread.

因此对于小型模板,只需使用 StringWriter , 对于大的,你可以使用 FileWriterFile.createTempFile() 创建的临时文件上.

关于java - Freemarker 中的管道流问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3624532/

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