private ByteBuffer prepareBuffer(MarshalOutputStream mos, GSByteArrayOutputStream bos, ByteBuffer byteBuffer) throws IOException { mos.flush(); int length = bos.size(); if (byteBuffer.array() != bos.getBuffer()) // the buffer was changed { byteBuffer = wrap(bos); } else { byteBuffer.clear(); } byteBuffer.putInt(length - 4); byteBuffer.position(length); byteBuffer.flip(); return byteBuffer; } }
/** * @param byteBuffer buffer that might be used by the GSByteArrayOutputStream * @return prepared buffer. */ private ByteBuffer prepareBuffer(MarshalOutputStream mos, GSByteArrayOutputStream bos, ByteBuffer byteBuffer) throws IOException { mos.flush(); int length = bos.size(); if (byteBuffer.array() != bos.getBuffer()) // the buffer was changed { byteBuffer = wrap(bos); } else { byteBuffer.clear(); } byteBuffer.putInt(length - LENGTH_SIZE); byteBuffer.position(length); byteBuffer.flip(); return byteBuffer; }
public ByteBuffer serializePacket(T packet) throws IOException { _packetStreamSerializer.writePacketToStream(_oss, packet); _oss.flush(); _oss.reset(); byte[] actualBuffer = _gsByteOutputStream.getBuffer(); //Need to rewrap the buffer because it was changed if (actualBuffer != _buffer) { _buffer = actualBuffer; _byteBuffer = ByteBuffer.wrap(_buffer); } //Remove reset indicator _byteBuffer.limit(_gsByteOutputStream.size() - 1); _byteBuffer.position(0); _gsByteOutputStream.setSize(0); return _byteBuffer; }