gpt4 book ai didi

java - Stream 到 InputStream
转载 作者:塔克拉玛干 更新时间:2023-11-02 08:02:53 24 4
gpt4 key购买 nike

我如何转换类型 Stream<Object>进入 InputStream ?目前,我获取迭代器并循环遍历所有数据,将其转换为 byteArray 并将其添加到 inputStream:

 ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);

Iterator<MyType> myItr = MyObject.getStream().iterator();

while (myItr.hasNext()) {

oos.writeObject(myItr.next().toString()
.getBytes(StandardCharsets.UTF_8));
}
oos.flush();
oos.close();

InputStream is = new ByteArrayInputStream(bao.toByteArray());

这样做的开销是多少?如果我的流包含 1 TB 的数据,我是否会将 1 TB 的数据吸入内存?有没有更好的方法来实现这一点?

最佳答案

您应该能够使用管道将 OutputStream 转换为 InputStream:

PipedOutputStream pos = new PipedOutputStream();
InputStream is = new PipedInputStream(pos);

new Thread(() -> {
try (ObjectOutputStream oos = new ObjectOutputStream(pos)) {
Iterator<MyType> myItr = MyObject.getStream().iterator();
while (myItr.hasNext()) {
oos.writeObject(myItr.next().toString()
.getBytes(StandardCharsets.UTF_8));
}
} catch (IOException e) {
// handle closed pipe etc.
}
}).start();

灵感来自 this answer .

关于java - Stream<Object> 到 InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45972209/

24 4 0