【问题标题】:Play/Akka integration with Java OutputStreamsPlay/Akka 与 Java OutputStreams 的集成
【发布时间】:2013-04-17 16:31:32
【问题描述】:

我正在写剧本!应用程序公开了一个允许用户生成 PDF 报告的 REST API。我受到使用旧 Java API 进行实际报告生成的要求的限制。该库有一个方法 generate(OutputStream out, ...),即它需要一个 java.io.OutputStream 来写入结果报告。

我的问题是将它与 Play/Akka 集成以提供分块编码中的内容。为此,我需要创建一个Enumerator[Array[Byte]],它以某种方式包含来自Java 库的OutputStream。我想出了一个可行的解决方案,它使用PipedOutputSteam/PipedInputStream duo 使用Enumerator.fromStream 将库的输出通过管道传输到 Enumerator。

我想知道是否有更好的方法来实现这一点,但我似乎无法在 Akka 或 Play 中找到明确的示例!将枚举器与 OutputStreams 集成的文档。我知道 Java 库的阻塞 IO 是设计更好解决方案的限制因素,但也许有一种更简洁的方法可以做到这一点。有什么想法吗?

跟进

假设我使用Enumerator.outputStream,将实际报告生成移动到另一个参与者(可能在另一台机器上)的安全方法是什么?例如,我猜测发送 OutputStream 是不安全的(并且只能在本地工作)。

【问题讨论】:

    标签: java scala playframework-2.0 akka outputstream


    【解决方案1】:

    Play 2.1 有以下方法:Enumerator.outputStream(a: (OutputStream) ⇒ Unit): Enumerator[Array[Byte]] 这可能正是你想要的。

    它的实现是专门使用其他 Play 2.1 类,所以如果你使用的是 Play 2.0,你需要做一些额外的挖掘来实现同样的事情。

    【讨论】:

    • 谢谢!我完全错过了!