title: Java NIO ByteBuffer : read the message size on head before read the complete message
body: <p>I'm making a java NIO server which receive messages, each message have its size on the head of the message, that why I'm reading first into a buffer which have default size(44), then get the complete size from this buffer, and then create a new buffer which is supposed to get the rest of the message(body) and then use System.arrayCopy() to make an array with the complete message. this operations are working good, the problem is that the second buffer(body of the message)have the size but does not contain the right data.
  plz here is my code if you something wrong :</p>
  
  <pre><code>public void getMessageByMessageSize(SelectionKey key) {
      socket = (SocketChannel) key.channel();
      int nBytes = 0;
      byte[] message = null;
      try {
          nBytes = socket.read(headBuffer);
          if (nBytes &lt; 0) {
              try {
                  key.channel().close();
                  key.cancel();
                  return;
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
                      //size of the message body
          int corpMessageSize = MessageUtils.getMessageSize(headBuffer)
                  - HEADER_SIZE;
          ByteBuffer corpsBuffer = ByteBuffer.allocate(corpMessageSize);
          headBuffer.flip();
          nBytes += socket.read(corpsBuffer);
          corpsBuffer.flip();
          byte[] corp=corpsBuffer.array();
  
          message = new byte[nBytes];
          System.arraycopy(headBuffer.array(), 0, message, 0, HEADER_SIZE);
          System.arraycopy(corpsBuffer.array(), 0, message, HEADER_SIZE,
                  nBytes - HEADER_SIZE);
          System.out.println(nBytes);
          headBuffer.clear();
          corpsBuffer.clear();
      } catch (IOException e) {
          e.printStackTrace();
          try {
              key.channel().close();
              key.cancel();
              return;
          } catch (IOException ex) {
              e.printStackTrace();
          }
      }
  
      this.worker.verifyConnection(this,message, key);
      //this.worker.processData(this, socket, message, nBytes);
  }
  </code></pre>
  
  <p>i have a simple client which send create a byte message, make its size in the head, and then send it.</p>
  
  <p>thanks</p>