在编写Java代码时,我真的想知道为什么当第一个参数是字节数组对象时,某些函数为什么需要字节数组长度作为参数。为什么它们没有从提供的对象中得到长度?

例如:

// E.g.: 1. Bitmap
byte[] bytes = task.getResult();
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

// E.g.: 2. Datagram
byte[] data = new byte[1024];
DatagramPacket request = new DatagramPacket(data, data.length);


如果他们想要长度,为什么不使用data.length?

最佳答案

字节数组是一个缓冲区,可读取长度小于缓冲区长度的数据。 length参数定义缓冲区中相关的字节数。您不应该在参数中传递缓冲区的长度,那将是多余的。您应该传递缓冲区中包含实际数据的字节数。

例如,DatagramPacket的API文档对此进行了说明。

length - the number of bytes to read

10-08 15:57