2016-04-11 41 views
0

有没有一种方法可以避免必须将ByteBuffer中的byte []与ByteBuffer.get()操作复制。直接从ByteBuffer转到字符串,但没有中间字节[]?

我一直在寻找这个职位Java: Converting String to and from ByteBuffer and associated problems

,并导致中介CharBuffer的,我不想为好。

我希望它从ByteBuffer转到String。

当我知道我有一个byte []底层,这是很容易的代码,像这样

new String(data, offset, length, charSet); 

我希望与ByteBuffer的类似的东西。我开始认为这可能是不可能的?我需要真正解码ByteBuffer的N个字节。

这可能有些不成熟的优化,但我真的只是好奇,想要测试性能和挤出每一点点。 (个人项目真的)。

感谢, 院长

+2

你的意思是[ByteBuffer.array()](https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html#array%28%29)? – user3159253

回答

2

不是真的直接ByteBuffer,没有。你需要有中间的东西,因为String不会把ByteBuffer作为构造函数的参数,并且你不能换行一个(或者甚至是char[])。如果缓冲区是非直接的,则可以使用array()方法来获取对后备数组(不是中间数组)的引用,并从中创建String

另一方面,您的项目中可能会有更多性能敏感的地方。

+0

好吧,我正在玩一个nio库,测试显示字节复制是昂贵的:(所以我希望能够防止更大的字节数组拷贝并直接进行,真的好像他们应该有这个功能......。 –

+0

但是,在完整的应用程序堆栈的情况下,它将是最小的 –

+0

我可以想象,可能会出现一些问题,试图从基本上不受管理(就Java而言)内存中创建Java String,而不进行任何复制之间的字节数。 – Kayaman

相关问题