有人可以帮我理解这个循环吗?
byte tempBuffer[] = new byte[64*1024];
for (int i = 0; i < tempBuffer.length; i++) {
wavPanel.addAudioByte(tempBuffer[i]);
}
在我看来,它的工作原理如下:
addAudioByte()
对象的wavPanel
方法n次抱歉我的困惑。
有人可以用语言告诉我,循环的作用是什么吗?
提前致谢。
Carlos Frerera
答案 0 :(得分:9)
字节数组的大小为64 * 1024,因此循环执行64 * 1024次。每次循环执行时,字节数组中的下一个字节将作为参数传递给方法addAudioByte(以第0个元素开头)。
addAudioByte(byte byt)方法的作用取决于此方法的实现。
要回答你在上一个回答中提到的问题:
byte b代表传递给方法addAudioByte(...)的参数。这意味着要调用此方法,您必须将数据类型字节传递给此方法。 This link解释了字节数据类型。
答案 1 :(得分:7)
它叫
wavPanel.addAudioByte(...)
对于tempBuffer中的每个64 * 1024(65536)字节,如下所示:
wavPanel.addAuditByte(tempBuffer[0]);
wavPanel.addAuditByte(tempBuffer[1]);
wavPanel.addAuditByte(tempBuffer[2]);
wavPanel.addAuditByte(tempBuffer[3]);
wavPanel.addAuditByte(tempBuffer[4]);
....
最终以64 * 1024-1字节结束
...
wavPanel.addAuditByte(tempBuffer[65535]);
请记住,虽然此数组中有65 * 1024个字节,但由于数组开始索引为0,因此您不能要求第65536个索引,因为如果从零开始计算它们,那么{{1}实际上是 65537th 字节
答案 2 :(得分:1)
这是一个显示基础知识的小例子。让我们用一个只有四个值的小数组:
byte[] tempBuffer = new byte[4];
tempBuffer[0] = 10;
tempBuffer[1] = 10;
tempBuffer[2] = 10;
tempBuffer[3] = 10;
tempBuffer.length
是数组的大小(4个插槽),数组中第一个值的索引是0
,最后一个的索引是(tempBuffer.length-1) = 3
。
现在循环:
for (int i = 0; i < tempBuffer.length; i++) {
// do something
}
这将循环4次,i
将在每次迭代时递增1。所以在第一次迭代中,我是0
,在最后一次迭代中,i
的值为3
。
wavPanel.addAudioByte(tempBuffer[i]);
这是最后一个'java魔术'。 tempBuffer [i]是数组中第i个'slot'的值,所以如果i
是0
,tempBuffer[0]
是10
(根据我们的初始化)。此值将传递给方法wavPanel.addAudioByte(byte b)
。