提交 1f13da57 编写于 作者: Y YunaiV

美滋滋

标记这个类,看完了
上级 4c90f914
......@@ -19,6 +19,9 @@ package com.alibaba.dubbo.remoting.buffer;
import java.nio.ByteBuffer;
/**
* Buffer 工具类
*/
public final class ChannelBuffers {
public static final ChannelBuffer EMPTY_BUFFER = new HeapChannelBuffer(0);
......@@ -26,19 +29,23 @@ public final class ChannelBuffers {
private ChannelBuffers() {
}
// DynamicChannelBuffer ,实际是 HeapChannelBuffer
public static ChannelBuffer dynamicBuffer() {
return dynamicBuffer(256);
}
// DynamicChannelBuffer ,实际是 HeapChannelBuffer
public static ChannelBuffer dynamicBuffer(int capacity) {
return new DynamicChannelBuffer(capacity);
}
// DynamicChannelBuffer ,实际是 HeapChannelBuffer
public static ChannelBuffer dynamicBuffer(int capacity,
ChannelBufferFactory factory) {
return new DynamicChannelBuffer(capacity, factory);
}
// HeapChannelBuffer
public static ChannelBuffer buffer(int capacity) {
if (capacity < 0) {
throw new IllegalArgumentException("capacity can not be negative");
......@@ -49,6 +56,7 @@ public final class ChannelBuffers {
return new HeapChannelBuffer(capacity);
}
// HeapChannelBuffer
public static ChannelBuffer wrappedBuffer(byte[] array, int offset, int length) {
if (array == null) {
throw new NullPointerException("array == null");
......@@ -58,6 +66,7 @@ public final class ChannelBuffers {
return wrappedBuffer(dest);
}
// HeapChannelBuffer
public static ChannelBuffer wrappedBuffer(byte[] array) {
if (array == null) {
throw new NullPointerException("array == null");
......@@ -68,6 +77,7 @@ public final class ChannelBuffers {
return new HeapChannelBuffer(array);
}
// HeapChannelBuffer || ByteBufferBackedChannelBuffer
public static ChannelBuffer wrappedBuffer(ByteBuffer buffer) {
if (!buffer.hasRemaining()) {
return EMPTY_BUFFER;
......@@ -79,6 +89,7 @@ public final class ChannelBuffers {
}
}
// ByteBufferBackedChannelBuffer
public static ChannelBuffer directBuffer(int capacity) {
if (capacity == 0) {
return EMPTY_BUFFER;
......
......@@ -22,14 +22,22 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.nio.ByteBuffer;
/**
* 动态的 ChannelBuffer 实现类
*/
public class DynamicChannelBuffer extends AbstractChannelBuffer {
/**
* 工厂
*/
private final ChannelBufferFactory factory;
/**
* Buffer
*/
private ChannelBuffer buffer;
public DynamicChannelBuffer(int estimatedLength) {
this(estimatedLength, HeapChannelBufferFactory.getInstance());
this(estimatedLength, HeapChannelBufferFactory.getInstance()); // 默认 HeapChannelBufferFactory
}
public DynamicChannelBuffer(int estimatedLength, ChannelBufferFactory factory) {
......@@ -39,7 +47,9 @@ public class DynamicChannelBuffer extends AbstractChannelBuffer {
if (factory == null) {
throw new NullPointerException("factory");
}
// 设置 `factory`
this.factory = factory;
// 创建 `buffer`
buffer = factory.getBuffer(estimatedLength);
}
......@@ -65,12 +75,12 @@ public class DynamicChannelBuffer extends AbstractChannelBuffer {
buffer = newBuffer;
}
@Override
public int capacity() {
return buffer.capacity();
}
@Override
public ChannelBuffer copy(int index, int length) {
DynamicChannelBuffer copiedBuffer = new DynamicChannelBuffer(Math.max(length, 64), factory());
copiedBuffer.buffer = buffer.copy(index, length);
......@@ -78,67 +88,67 @@ public class DynamicChannelBuffer extends AbstractChannelBuffer {
return copiedBuffer;
}
@Override
public ChannelBufferFactory factory() {
return factory;
}
@Override
public byte getByte(int index) {
return buffer.getByte(index);
}
@Override
public void getBytes(int index, byte[] dst, int dstIndex, int length) {
buffer.getBytes(index, dst, dstIndex, length);
}
@Override
public void getBytes(int index, ByteBuffer dst) {
buffer.getBytes(index, dst);
}
@Override
public void getBytes(int index, ChannelBuffer dst, int dstIndex, int length) {
buffer.getBytes(index, dst, dstIndex, length);
}
@Override
public void getBytes(int index, OutputStream dst, int length) throws IOException {
buffer.getBytes(index, dst, length);
}
@Override
public boolean isDirect() {
return buffer.isDirect();
}
@Override
public void setByte(int index, int value) {
buffer.setByte(index, value);
}
@Override
public void setBytes(int index, byte[] src, int srcIndex, int length) {
buffer.setBytes(index, src, srcIndex, length);
}
@Override
public void setBytes(int index, ByteBuffer src) {
buffer.setBytes(index, src);
}
@Override
public void setBytes(int index, ChannelBuffer src, int srcIndex, int length) {
buffer.setBytes(index, src, srcIndex, length);
}
@Override
public int setBytes(int index, InputStream src, int length) throws IOException {
return buffer.setBytes(index, src, length);
}
@Override
public ByteBuffer toByteBuffer(int index, int length) {
return buffer.toByteBuffer(index, length);
}
......@@ -173,17 +183,17 @@ public class DynamicChannelBuffer extends AbstractChannelBuffer {
return super.writeBytes(in, length);
}
@Override
public byte[] array() {
return buffer.array();
}
@Override
public boolean hasArray() {
return buffer.hasArray();
}
@Override
public int arrayOffset() {
return buffer.arrayOffset();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册