gor*_*lph 11 java io scala playframework iterate
为了在我的应用程序中实现一个新模块,我一直在阅读Iteratees和Enumerators上的很多内容.
我现在正处于与第三方Java库集成的地步,并坚持使用此方法:
public Email addAttachment(String name, InputStream file) throws IOException {
this.attachments.put(name, file);
return this;
}
Run Code Online (Sandbox Code Playgroud)
我在我的API中拥有的是从WSHTTP调用返回的正文Enumerator[Array[Byte]].
我现在想知道如何编写一个Iteratee可以处理这个方法的块Array[Bytes]并创建一个InputStream.
(侧栏):该addAttachment方法还有其他版本,java.io.File但我希望避免在此操作中写入磁盘,而是宁愿处理流.
我试着从写这样的东西开始:
Iteratee.foreach[Array[Byte]] { bytes =>
???
}
Run Code Online (Sandbox Code Playgroud)
但是我不确定如何在InputStream这里与java进行交互.我找到了一个叫做a的东西,ByteArrayInputStream但它Array[Byte]在构造函数中占据了整体,我不确定在这个场景中是否可以工作,因为我正在使用块?
我可能需要一些Java帮助!
在此先感谢您的帮助.
如果我关注你,我认为你想使用 PipedInputStream 和 PipedOutputStream:
https://docs.oracle.com/javase/8/docs/api/java/io/PipedInputStream.html
你总是成对使用它们。您可以像这样构造该对:
PipedInputStream in = new PipedInputStream(); //can also specify a buffer size
PipedOutputStream out = new PipedOutputSream(in);
Run Code Online (Sandbox Code Playgroud)
将输入流传递给 API,然后在您自己的代码中迭代您的卡盘并写入字节。
唯一需要注意的是您需要在单独的线程中读/写。就您而言,在单独的线程中进行迭代/编写可能会很好。我相信你在 Scala 中能比我更好地处理它,在 Java 中它会是这样的:
PipedInputStream in = new PipedInputStream(); //can also specify a buffer size
PipedOutputStream out = new PipedOutputSream(out);
new Thread(() -> {
// do your looping in here, write to 'out'
out.close();
}).run();
email.addAttachment(in);
email.send();
in.close();
Run Code Online (Sandbox Code Playgroud)
(为了清楚起见,省略异常处理和资源处理)
| 归档时间: |
|
| 查看次数: |
1005 次 |
| 最近记录: |