我正在写剧本!公开 REST API 的应用程序允许用户生成 PDF 报告。我受到使用旧 Java API 进行实际报告生成的要求的限制。该库有一个方法 generate(OutputStream out, ...)
,即它使用一个 java.io.OutputStream
来写入结果报告。
我的问题是将其与 Play/Akka 集成以提供 Chunked Encoding 中的内容。为此,我需要创建一个 Enumerator[Array[Byte]]
,它以某种方式包含来自 Java 库的 OutputStream
。我提出了一个可行的解决方案,该解决方案使用 PipedOutputSteam
/PipedInputStream
duo 通过管道将输出从库传输到使用 Enumerator.fromStream
的 Enumerator。
我想知道是否有更好的方法来实现这一点,但我似乎无法在 Akka 或 Play! 中找到明确的示例!将枚举器与 OutputStreams 集成的文档。我知道 Java 库的阻塞 IO 是设计更好解决方案的限制因素,但也许有更简洁的方法来做到这一点。有什么想法吗?
跟进
假设我使用 Enumerator.outputStream
,将实际报告生成移动到另一个参与者(可能在另一台机器上)的安全方法是什么?例如,我猜测发送 OutputStream 是不安全的(并且只能在本地工作)。
最佳答案
Play 2.1 具有以下方法:Enumerator.outputStream(a: (OutputStream) ⇒ Unit): Enumerator[Array[Byte]]
这可能正是您想要的。
它的实现专门使用其他 Play 2.1 类,因此如果您使用 Play 2.0,则需要进行一些额外的挖掘才能实现相同的目的。
关于java - Play/Akka 与 Java OutputStreams 的集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16065424/