ByteBuffer.wrap出乎意料地出来了

时间:2016-01-27 08:33:31

标签: java android bytebuffer

我使用ByteArray创建一个新字符串,但结果出乎意料。这是我的代码

{{1}}

字节数组的长度为518400.但是日志信息显示:

ByteArraySize = 518400 MsgLen = 518400,518400

而不是

ByteArraySize = 518400 MsgLen = 15,15

有什么问题?

2 个答案:

答案 0 :(得分:1)

这是预期的结果。

根据ByteBuffer.wrap()中的JavaDoc:

  

将字节数组包装到缓冲区中。

     

新缓冲区将由给定的字节数组支持;也就是说,对缓冲区的修改将导致数组被修改,反之亦然。

ByteBuffer.array()

  

返回支持此缓冲区的字节数组(可选操作)。

     

修改此缓冲区的内容将导致返回的数组内容被修改,反之亦然。

这意味着ByteBuffer.array()将返回与ByteBuffer.wrap()包装的完全相同的数组。

答案 1 :(得分:1)

array()返回支持缓冲区的字节数组。

它是同一个对象。即byteBuf.array() == data

要使用data的子数组构造字符串,请使用: String msg = new String(data, 0, 15);