System.arraycopy切断字节

时间:2012-07-24 19:08:24

标签: java sockets

我正在使用下面的代码从连接的套接字中读取数据,并且在执行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
                   }
              }
          }
     }
}

1 个答案:

答案 0 :(得分:6)

  

发送系统发送43个字节。

这并不意味着您在read的一次调用中接收所有43个字节。

  

任何人都知道为什么arraycopy正在切断其他字节?

不是。我怀疑你会发现byteRead是41,这意味着“问题”发生在arraycopy之前。

我希望你在下一次调用read时获得剩下的两个字节(如果另一端发送了更多数据,可能会有更多数据)。

或者你的代码在另一端是错误的,而你只是发送41个字节开始。