如何转换" java.nio.HeapByteBuffer"到String

时间:2014-10-31 14:13:25

标签: java scala

我有一个数据结构java.nio.HeapByteBuffer [pos = 71098 lim = 71102 cap = 94870],我需要将其转换为Int(在Scala中),转换可能看起来很简单,但无论我接近什么,我都做了没有得到正确的转换。你能帮帮我吗?

这是我的代码段:

val v : ByteBuffer= map.get("company").get
val utf_str = new String(v, java.nio.charset.StandardCharsets.UTF_8)
println (utf_str)

输出只是" R" ??

1 个答案:

答案 0 :(得分:1)

我看不出你怎么能得到它来编译,String有构造函数接受另一个字符串或可能是一个数组,但不是ByteBuffer或它的任何父类。

要使用nio buffer api,首先要写入缓冲区,然后在从缓冲区读取之前进行翻转,在线有很多好的资源。例如:http://tutorials.jenkov.com/java-nio/buffers.html

如何读取字符串完全取决于字符在缓冲区内的编码方式,如果它们是每个字符两个字节(因为字符串在Java / JVM中),您可以通过使用将缓冲区转换为字符缓冲区asCharBuffer。

所以,例如:

val byteBuffer = ByteBuffer.allocate(7).order(ByteOrder.BIG_ENDIAN);
byteBuffer.putChar('H').putChar('i').putChar('!')
byteBuffer.flip()
val charBuffer = byteBuffer.asCharBuffer
assert(charBuffer.toString == "Hi!")