将字节流转换为字节数组,无需额外空间
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将字节流转换为字节数组,无需额外空间相关的知识,希望对你有一定的参考价值。
我有一个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; }
}
以上是关于将字节流转换为字节数组,无需额外空间的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 8 应用程序中转换字节数组以产生不同的音频声音
使用校验和将字节数组转换为字符串。在 python 中重新迭代时获取额外的空字节