package redis.netty4; import com.google.common.base.Charsets; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import java.io.IOException; import java.nio.charset.Charset; import static redis.util.Encoding.numToBytes; public class BulkReply implements Reply<ByteBuf> { public static final BulkReply NIL_REPLY = new BulkReply(); public static final char MARKER = '$'; private final ByteBuf bytes; private final int capacity; private BulkReply() { bytes = null; capacity = -1; } public BulkReply(byte[] bytes) { this.bytes = Unpooled.wrappedBuffer(bytes); capacity = bytes.length; } public BulkReply(ByteBuf bytes) { this.bytes = bytes; capacity = bytes.capacity(); } @Override public ByteBuf data() { return bytes; } public String asAsciiString() { if (bytes == null) return null; return bytes.toString(Charsets.US_ASCII); } public String asUTF8String() { if (bytes == null) return null; return bytes.toString(Charsets.UTF_8); } public String asString(Charset charset) { if (bytes == null) return null; return bytes.toString(charset); } @Override public void write(ByteBuf os) throws IOException { os.writeByte(MARKER); os.writeBytes(numToBytes(capacity, true)); if (capacity > 0) { os.writeBytes(bytes); os.writeBytes(CRLF); } } public String toString() { return asUTF8String(); } }