/** * Assembles all the fragments into one buffer. Takes all Messages, and combines their buffers * into one buffer. This method does not check if the fragmentation is complete (use {@link * #isComplete()} to verify before calling this method) * * @return the complete message in one buffer */ private Message assembleMessage() { Message retval; byte[] combined_buffer, tmp; int combined_length = 0, length, offset; int index = 0; for (Message fragment : fragments) combined_length += fragment.getLength(); combined_buffer = new byte[combined_length]; retval = fragments[0].copy(false); // doesn't copy the payload, but copies the headers for (int i = 0; i < fragments.length; i++) { Message fragment = fragments[i]; fragments[i] = null; // help garbage collection a bit tmp = fragment.getRawBuffer(); length = fragment.getLength(); offset = fragment.getOffset(); System.arraycopy(tmp, offset, combined_buffer, index, length); index += length; } retval.setBuffer(combined_buffer); return retval; }