字节数组赋值问题?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字节数组赋值问题?相关的知识,希望对你有一定的参考价值。
byte[] buffer = new byte[1024];
byte[] result = null;
buffer = (byte[]) map.get("data");
result = new byte[buffer.length];
for (int i = 0; i < buffer.length; i++)
result[i] = buffer[i];
我看项目源码中有这样的赋值,想问一下为什么buffer是直接从map中获取,而result要一个个从buffer中获取?为什么不能像buffer一样直接获取map?
如果直接使用固定长度的数组来接收map中的byte数组,可能会导致部分数据被截断,或者数组过大导致内存浪费。因此,需要根据实际情况动态分配数组大小。
另外,使用循环逐个复制的方式将buffer中的数据复制到result数组中,是因为在Java中,数组是引用类型,直接将buffer赋值给result只是让result指向了buffer的内存空间,而不是复制了其中的数据。因此需要使用循环逐个复制的方式,将buffer中的数据复制到新的result数组中。 参考技术A 这是因为,java里面byte数组直接赋值其实是一个引用,也就是占用的数据区域其实是一个。
int[] a = 1,2,3;int[] b = new int[3];b = a;for(int i = 0; i < a.length; i++)a[i] = 0;
这个代码执行完之后,ab都是全0了。
以上是关于字节数组赋值问题?的主要内容,如果未能解决你的问题,请参考以下文章