private RPCProtos.RequestHeader getHeader(ByteBuf in, int headerSize) throws IOException { ByteBuf msg = in.readRetainedSlice(headerSize); try { byte[] array; int offset; int length = msg.readableBytes(); if (msg.hasArray()) { array = msg.array(); offset = msg.arrayOffset() + msg.readerIndex(); } else { array = new byte[length]; msg.getBytes(msg.readerIndex(), array, 0, length); offset = 0; } RPCProtos.RequestHeader.Builder builder = RPCProtos.RequestHeader.newBuilder(); ProtobufUtil.mergeFrom(builder, array, offset, length); return builder.build(); } finally { msg.release(); } }
@Override public int getBytes(int index, FileChannel out, long position, int length) throws IOException { return buf.getBytes(index, out, position, length); }
@Override public ByteBuf getBytes(int index, byte[] dst, int dstIndex, int length) { buf.getBytes(index, dst, dstIndex, length); return this; }
@Override public ByteBuf getBytes(int index, ByteBuf dst, int dstIndex, int length) { buf.getBytes(index, dst, dstIndex, length); return this; }
@Override public int getBytes(int index, FileChannel out, long position, int length) throws IOException { return unwrap().getBytes(index, out, position, length); }
@Override public ByteBuf getBytes(int index, byte[] dst, int dstIndex, int length) { unwrap().getBytes(index, dst, dstIndex, length); return this; }
@Override public ByteBuf getBytes(int index, byte[] dst) { checkIndex(index, dst.length); buffer.getBytes(index, dst); return this; }
@Override protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> out) throws Exception { // copy the ByteBuf content to a byte array byte[] array = new byte[msg.readableBytes()]; msg.getBytes(0, array); out.add(array); } }
@Override public ByteBuf getBytes(int index, OutputStream out, int length) throws IOException { unwrap().getBytes(index, out, length); return this; }
@Override public ByteBuf getBytes(int index, byte[] dst, int dstIndex, int length) { checkIndex(index, length); buffer.getBytes(index, dst, dstIndex, length); return this; }
@Override public ByteBuf getBytes(int index, ByteBuf dst, int dstIndex, int length) { checkIndex(index, length); buffer.getBytes(index, dst, dstIndex, length); return this; }
@Override public int getBytes(int index, GatheringByteChannel out, int length) throws IOException { return unwrap().getBytes(index, out, length); }
@Override public ByteBuf getBytes(int index, ByteBuffer dst) { unwrap().getBytes(index, dst); return this; }
@Override public ByteBuf getBytes(int index, OutputStream out, int length) throws IOException { checkIndex0(index, length); unwrap().getBytes(idx(index), out, length); return this; }
@Override public byte[] get() { if (byteBuf == null) { return EMPTY_BUFFER.array(); } byte[] array = new byte[byteBuf.readableBytes()]; byteBuf.getBytes(byteBuf.readerIndex(), array); return array; }
@Override public ByteBuf getBytes(int index, byte[] dst, int dstIndex, int length) { checkIndex0(index, length); unwrap().getBytes(idx(index), dst, dstIndex, length); return this; }
@Override public int getBytes(int index, GatheringByteChannel out, int length) throws IOException { checkIndex0(index, length); return unwrap().getBytes(idx(index), out, length); }
private int setInput(ByteBuf decompressed) { int len = decompressed.readableBytes(); if (decompressed.hasArray()) { compressor.setInput(decompressed.array(), decompressed.arrayOffset() + decompressed.readerIndex(), len); } else { byte[] in = new byte[len]; decompressed.getBytes(decompressed.readerIndex(), in); compressor.setInput(in, 0, in.length); } return len; }
private int setInput(ByteBuf compressed) { int len = compressed.readableBytes(); if (compressed.hasArray()) { decompressor.setInput(compressed.array(), compressed.arrayOffset() + compressed.readerIndex(), len); } else { byte[] in = new byte[len]; compressed.getBytes(compressed.readerIndex(), in); decompressor.setInput(in, 0, in.length); } return len; }
@Override public final ByteBuf setBytes(int index, ByteBuf src, int srcIndex, int length) { checkSrcIndex(index, length, srcIndex, src.capacity()); if (src.hasMemoryAddress()) { PlatformDependent.copyMemory(src.memoryAddress() + srcIndex, memory, idx(index), length); } else if (src.hasArray()) { setBytes(index, src.array(), src.arrayOffset() + srcIndex, length); } else { src.getBytes(srcIndex, memory, idx(index), length); } return this; }