有没有一种更快的方法将一个数组中的字节复制到另一个数组中,而无需迭代?
我通过蓝牙从输入流中读取字节。
public void run() {
byte[] buffer = new byte[100]; // buffer store for the stream
int bytes; // bytes returned from read()
// Keep listening to the InputStream until an exception occurs
while (true) {
try {
// Read from the InputStream
bytes = mmInStream.read(buffer); // Get number of bytes and message in "buffer"
h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget(); // Send to message queue Handler
} catch (IOException e) {
break;
}
}
}
这个功能会向处理程序发送随机数量的字节。我会将它们读取并放入数组中,以便在下载完成后处理数据。从 PIC 微控制器发送的数据长度为 6055 字节。
h = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case SUCCESS_CONNECT:
// Connected so start connected thread
btSocket = (BluetoothSocket) msg.obj;
byteCount = 0;
arrayCount = 0;
mConnectedThread = new FullDataActivity.ConnectedThread(btSocket);
mConnectedThread.start();
mConnectedThread.write(getFullDataConByte); // Send 255 to start
break;
case RECIEVE_MESSAGE: // if receive massage
byte[] readBuf = (byte[]) msg.obj;
// iterate through obj and copy bytes to fullDataChunk array
for (int a = 0; a < msg.arg1; a++) {
fullDataChunk[byteCount] = readBuf[a];
Log.d("readBuf[a] = ",Integer.toString(readBuf[a] & 0xFF));
byteCount++;
}
// if all bytes done process
if (byteCount == 6055) {// process data when complete.
我的处理程序在复制数据时出现了缺失字节的问题,导致数据破坏。我不知道在for循环中处理剩余数据之前,run方法是否会向处理程序发送新的字节。 我已经记录了运行时发送的字节,它们是正确的,但在处理程序处理时就出了问题。
我需要确保在发送新数据之前先处理已发送的数据,或者更快地将数据复制到数组中。 有任何想法吗?
buffer
,目前你正在覆盖传入消息的现有缓冲区。此外,你可以使用System.arraycopy(Object, Object, int, int)
更快地复制数组。它比你的循环更快。参考链接:https://developer.android.com/reference/java/lang/System.html - ug_