0

我有一个这样声明的 byte[] :

byte[] buffer;
buffer = new byte[128];

然后,我通过蓝牙获得接收到的数据大小:

bytes = GlobalVar.mmInStream.read(buffer);

字节是接收数据的大小。我需要将缓冲区的大小调整为包含数据的大小。

4

2 回答 2

2

由于您无法调整数组的大小(它们是不可变的),您需要创建一个副本:

byte[] data = new byte[bytes]
System.arraycopy(buffer, 0, data, 0, bytes)

但是,继续使用buffer并阅读它直到bytes出于任何原因需要它肯定会更有效。

于 2013-09-13T10:01:08.043 回答
1

您需要为缓冲区重新分配具有正确大小的内存,因为默认情况下数组的大小是固定的。编辑:如果缓冲区已经包含数据并且您不想丢失它们,您也可以使用:

buffer = Arrays.copyOf(buffer, newsize);

它将您当前的缓冲区数据移动到新分配的内存。

于 2013-09-13T09:56:35.460 回答