我有一个数据结构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" ??
答案 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!")