i有一个bytearrayoutputstream,其中包含大量数据,最终将其转换为字节数组并写入缓存:
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (JsonGenerator jg = mapper.getFactory().createGenerator(baos)) {
for (Object result : results) {
jg.writeObject(result);
}
}
localCache.put(cacheKey, baos.toByteArray());
}
catch (IOException e) {
throw Throwables.propagate(e);
}
这里的baos.toByteArray()
在内存中创建了一个全新的数据副本,我要避免使用。有没有办法将流转换为字节数组而无需使用额外的内存?
内部缓冲区和当前计数是Javadoc中记录的protected
字段。这意味着您应该可以使用ByteArrayOutputStream
子类并提供直接访问缓冲区的byte[] getBuffer()
方法。使用现有的size()
方法确定存在多少数据。
public class MyBAOS extends ByteArrayOutputStream
{
public MyBAOS() { super(); }
public MyBAOS(int size) { super(size); }
public byte[] getBuffer() { return buf; }
}