Java输出流与Play/Akka集成

4
我正在编写一个Play!应用程序,该应用程序公开了一个REST API,允许用户生成PDF报告。我的要求是使用旧的Java API来执行实际的报告生成。该库有一个方法generate(OutputStream out, ...),也就是它需要一个java.io.OutputStream,并将结果写入其中。
我的问题是如何将其与Play / Akka集成以在Chunked编码中提供内容。为此,我需要创建一个Enumerator [Array [Byte]],它以某种方式包含Java库的OutputStream。我想出了一个可行的解决方案,它使用PipedOutputSteam / PipedInputStream来将库中的输出导到Enumerator,然后使用Enumerator.fromStream
我想知道是否有更好的方法来实现这一点,但我似乎找不到Akka或Play!文档中明确的示例,可以将枚举器与输出流集成。我知道Java库的阻塞IO是设计更好的解决方案的限制因素,但可能有更简洁的方法来解决这个问题。有什么想法吗?
跟进:
假设我使用Enumerator.outputStream,将实际的报告生成移动到另一个Actor(可能在另一台计算机上)的安全方法是什么?例如,我猜发送OutputStream不安全(并且仅在本地工作)。
1个回答

1

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

具体实现使用了其他Play 2.1类,所以如果你使用的是Play 2.0,你需要做一些额外的调查才能达到同样的效果。


谢谢!我完全忽略了那个! - user510159

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接