将字节流转换为没有额外空间的字节阵列



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; }
}

最新更新