【发布时间】:2013-02-25 23:49:36
【问题描述】:
有没有办法从ByteBuffer 构造一个String,而无需先从缓冲区读取内容到中间byte[] 或char[]?
类似于string constructor that takes a byte[] 的 API 让我觉得很理想:
public String(ByteBuffer buffer, int offset, int length, Charset charset)
...但不存在这样的东西。
我找到了How to convert from ByteBuffer to Integer and String?,但它使用了一个辅助数组。
到目前为止,我发现的下一个最好的事情是将字节缓冲区投影为CharBuffer 并调用toString()。但这不允许使用 UTF-8 之类的东西来压缩字符串。
【问题讨论】:
-
你的 ByteBuffer 支持 array() 方法吗?
-
它是内存映射的,所以我不这么认为。但这些都是我希望我使用的任何 API 都能理解的错综复杂的东西。
-
我对您要完成的工作感到困惑。您可以使用
array方法获取ByteBuffer的支持字节数组。除了不想依赖内部实现细节之外,您的最终目标是什么? -
@Perception,
array是可选操作,可以抛出UnsupportedOperationException - If this buffer is not backed by an accessible array。我想如果 ByteBuffer 是一个 1 GB 的内存映射文件,那会发生确切的事情。 -
字节数组支持
ByteBuffers 在所有方面都毫无意义(为什么不直接使用byte[]);因此可以合理地假设一个人可能正在使用本机缓冲区。
标签: java optimization nio bytebuffer