java - Play/Akka 与 Java OutputStreams 的集成

标签 java scala playframework-2.0 akka outputstream

我正在写剧本!公开 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/

相关文章:

java - 将 Servlet 上下文参数传递给 Spring MVC Controller

java - 我不明白为什么当我学习 ServletContextListener 时会发生 ClassNotFoundException

java - 不支持的 major.minor 版本 51.0 (org/apache/maven/cli/MavenCli) - MAC OS X

scala - Play 2 - Scala - 表单验证器和单选按钮

linux - 如何在Linux终端中运行spark scala程序?

scala - Scala play框架中@Singleton的使用

java - 数据库连接池的用途?

mongodb - 如何使用 spark 和 mongo Hadoop 连接器更新 mongo 集合中的多个字段?

scala - 我可以在 Play Framework 的模板/ View 中调用 session 吗

Scala 使多选项检查更加简洁