我使用ByteArray创建一个新字符串,但结果出乎意料。这是我的代码
{{1}}
字节数组的长度为518400.但是日志信息显示:
ByteArraySize = 518400 MsgLen = 518400,518400
而不是
ByteArraySize = 518400 MsgLen = 15,15
有什么问题?
答案 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);