字节数组赋值问题?

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?

在这段代码中,buffer的长度是1024,是一个固定的值。而从map中获取到的byte数组的长度可能不同,因此需要根据实际长度来创建result数组,而不是直接使用长度为1024的固定数组。

如果直接使用固定长度的数组来接收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了。

以上是关于字节数组赋值问题?的主要内容,如果未能解决你的问题,请参考以下文章

C# 使用指针将不同值类型赋值到字节数组中

C++问题,怎么把char数组以ASCII码赋值给CString

Delphi字节转换字节数组

如何将int型数值赋值给char型数组

delphi 整型赋值为字节,

字符数组赋值『转载』