我用这样的方式声明了一个byte []:
byte[] buffer;
buffer = new byte[128];
然后,我通过蓝牙获得收到的数据大小:
bytes = GlobalVar.mmInStream.read(buffer);
字节是接收数据的大小。我需要的是将缓冲区的大小调整为其包含数据的大小。
答案 0 :(得分:2)
由于无法调整数组大小(它们是不可变的),您需要创建一个副本:
byte[] data = new byte[bytes]
System.arraycopy(buffer, 0, data, 0, bytes)
然而,继续使用buffer
并且只是在bytes
之前阅读它,无论出于何种原因,您都需要阅读它。
答案 1 :(得分:0)
您需要为具有正确大小的缓冲区重新分配内存,因为默认情况下阵列的大小是固定的。 编辑: 如果缓冲区已经包含数据并且您不想丢失它们,您也可以使用:
buffer = Arrays.copyOf(buffer, newsize);
将当前缓冲区数据移动到新分配的内存中。