我正在使用下面的代码从连接的套接字中读取数据,并且在执行System.arraycopy(tempBuffer,0,buffer,0,byteRead)代码后,我在缓冲区变量中接收到的数据41个字节。发送系统发送43个字节。任何人都知道为什么arraycopy正在切断其他字节?
public class BluetoothClientSocket{
private class ConnectedThread extends Thread {
private final BluetoothSocket mmSocket;
private final InputStream mmInStream;
private final OutputStream mmOutStream;
public ConnectedThread(BluetoothSocket socket) {
mmSocket = socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;
// Get the BluetoothSocket input and output streams
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) {
//handle exception logic
}
mmInStream = tmpIn;
mmOutStream = tmpOut;
}
public void run(){
byte[] tempBuffer = new byte[1024];
byte[] buffer = null;
int byteRead;
while (true) {
try {
InputStream itStrm = mmInStream;
byteRead = mmInStream.read(tempBuffer);
if(byteRead > 0){
buffer = new byte[byteRead];
System.arraycopy(tempBuffer, 0, buffer, 0, byteRead);
}
}
catch(Exception ex){
//handle exception logic
}
}
}
}
}
答案 0 :(得分:6)
发送系统发送43个字节。
这并不意味着您在read
的一次调用中接收所有43个字节。
任何人都知道为什么arraycopy正在切断其他字节?
不是。我怀疑你会发现byteRead
是41,这意味着“问题”发生在arraycopy
之前。
我希望你在下一次调用read
时获得剩下的两个字节(如果另一端发送了更多数据,可能会有更多数据)。
或者你的代码在另一端是错误的,而你只是发送41个字节开始。