当参数中已提供字节数组对象时,为什么某些 Java 函数需要字节数组长度?

在编写 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?


12345678_0001
浏览 160回答 3
3回答

慕的地6264312

字节数组是读取长度小于缓冲区长度的数据的缓冲区。length 参数定义了缓冲区中相关的字节数。您不应该在参数中传递缓冲区的长度,那将是多余的。您应该传递包含实际数据的缓冲区中的字节数。例如,DatagramPacket 的 API 文档揭示了这一点。length - the number of bytes to read

翻翻过去那场雪

简单的答案是:对缓冲区数组进行操作的大多数读取方法(在 Java 和任何其他语言中)都必须告诉您实际读取的确切字节数。请记住:该数组是一个缓冲区。该默认行为是buffer.length或更少字节可以被读取。所以,知道如何长的缓冲区是不帮你。您必须知道实际放入缓冲区的字节数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java