我该如何将类型为
Stream<Object>
的数据转换为InputStream
?目前,我会获取迭代器并循环遍历所有数据,将其转换为字节数组并添加到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());
但是这样做的开销会有多大呢?如果我的流包含一太字节的数据,那么我不就要将一太字节的数据吸入内存中吗?有没有更好的方法来实现这个目标呢?
InputStream
是你需要的吗?你正在将对象转换为字符串,获取它们的UTF-8表示作为字节数组,并对这些数组对象使用对象序列化。目前不清楚你想在另一端接收什么,当前既不是对象也不是字符串。你可以直接编写字符串,或者可以使用Writer
编写一个更简单的纯文本表示,而不需要对象序列化协议的开销,但两者都无法重新创建原始对象。 - Holger