转载 Mina:core-->buffer

很好的概括了IObuffer这个类原文地址:Mina:core-->buffer作者:程序猿

抽象类IoBuffer下有两子类,IoBufferWrapper(对其进行封装)和抽象类AbstractIoBuffer(对其方法的实现)。

接口IoBufferAllocator有两实现类,SimpleBufferAllocator(简单的缓冲分配器)和CachedBufferAllocator(在可自拓展的缓冲流中隐藏哪些类似重复利用的缓冲区)。

SimpleBufferAllocator和CachedBufferAllocator的区别:

SimpleBufferAllocator,当它的容量改变,IoBuffer下的ByteBuffer将被重新分配,这也意味着新分配的更大的ByteBuffer将替换旧的较小的ByteBuffer,即旧的Byte将标记成可回收垃圾对象。如果在容量不经常改变的情况下,这不成问题。当时,但容量经常变换,它将加重虚拟机的负担和增加重新分配新空间的成本。

CachedBufferAllocator使用ThreadLocal来存储缓存缓冲区并分配原来容量两倍的空间。如果IoBuffer.free()可以适当的提高性能。

IoBuffer

描述:在mina应该中使用的字节缓冲流

注意:此类代替了ByteBuffer,原因有两:

1、没有提供足够灵活的get/putXXX方法

2、它容量固定,难以写入可变长度的数据

特点:

1、通过allocate分配空间,2、包装现有的NIOBu和array,

3、自拓展,4自压缩,5、衍生缓冲区,6、可改变缓冲区的分配策略

已实现的接口(红色为常用):

分配空间

public static IoBuffer allocate(intcapacity)

public static IoBuffer allocate(intcapacity, boolean direct)

获得和设置分配器

static IoBufferAllocator getAllocator()

static void setAllocator(IoBufferAllocatornewAllocator)

判断是否设置成DirectBuffer

static boolean isUseDirectBuffer()

设置成DirectBuffer

static void setUseDirectBuffer(boolean useDirectBuffer)

规范容量

protected static int normalizeCapacity(intrequestedCapacity)

封装对象成IoBuffer

static IoBuffer wrap(byte[]byteArray)
static IoBuffer wrap(byte[] byteArray, int offset, intlength)
static IoBuffer wrap(ByteBuffer nioBuffer)

抽象接口:

byte[] array()
返回实现此缓冲区的 byte 数组(可选操作)。
int arrayOffset()
返回此缓冲区中的第一个元素在缓冲区的底层实现数组中的偏移量(可选操作)。
abstract CharBuffer asCharBuffer()
创建此字节缓冲区的视图,作为 char 缓冲区。
abstract DoubleBuffer asDoubleBuffer()
创建此字节缓冲区的视图,作为 double 缓冲区。
abstract FloatBuffer asFloatBuffer()
创建此字节缓冲区的视图,作为 float 缓冲区。

abstract InputStream asInputStream()

创建此字节缓冲区的视图,作为 InputStream。
abstract IntBuffer asIntBuffer()
创建此字节缓冲区的视图,作为 int 缓冲区。
abstract LongBuffer asLongBuffer()
创建此字节缓冲区的视图,作为 long 缓冲区。

abstract OutputStream asOutputStream();

创建此字节缓冲区的视图,作为 OutputStream。
abstract ByteBuffer asReadOnlyBuffer()
创建共享此缓冲区内容的新的只读字节缓冲区。
abstract ShortBuffer asShortBuffer()
创建此字节缓冲区的视图,作为 short 缓冲区。

abstract ByteBuffer buf()

返回基层ByteBuffer
abstract int capacity()

返回容量
abstract IoBuffer capacity(int newCapacity)

改变容量
abstract IoBuffer clear()

清除此缓冲区。将位置设置为 0,将限制设置为容量,并丢弃标记。

在使用一系列通道读取或放置 操作填充此缓冲区之前调用此方法。

此方法不能实际清除缓冲区中的数据,但多数情况下确实是在清除数据时使用。
abstract IoBuffer compact()

压缩此缓冲区
abstract IoBuffer duplicate()

创建共享此缓冲区内容的新的字节缓冲区。
abstract IoBuffer expand(intexpectedRemaining)
拓展需要的空间,不设置自动拓展照样可用

abstract IoBuffer expand(int position, intexpectedRemaining)
拓展指定位置起需要的空间,不设置自动拓展照样可用

abstract IoBuffer fill(byte value, intsize)
填充Iobuffer的一段长为size的空间为value值。position位置前移。

abstract IoBuffer fill(int size)
填充Iobuffer的一段长为size的空间为(0x00)。position位置前移。

abstract IoBuffer fillAndReset(byte value, intsize)
填充Iobuffer的一段长为size的空间为value值。position位置不变。

abstract IoBuffer fillAndReset(int size)
填充Iobuffer的一段长为size的空间为(0x00)。position位置不变。

abstract IoBufferflip()
反转此缓冲区。首先将限制设置为当前位置,然后将位置设置为 0。

如果已定义了标记,则丢弃该标记。

当将数据从一个地方传输到另一个地方时,经常将此方法与 compact方法一起使用。

abstract void free()
声明此IoBuffer及其衍生对象不能再使用,以使得它可以被一些分配器再使用。

这不是强制性调用的方法,当调用此方法可达到更好的性能优化。

abstract byte get()
相对 get 方法。
abstract IoBuffer get(byte[] dst)
相对批量 get 方法。
abstract IoBuffer get(byte[] dst, int offset, int length)
相对批量 get 方法。
abstract byte get(int index)
绝对 get 方法。
abstract char getChar()
用于读取 char 值的相对 get 方法。
abstract char getChar(int index)
用于读取 char 值的绝对 get 方法。
abstract double getDouble()
用于读取 double 值的相对 get 方法。

abstract <E extendsEnum<E>>getEnum(Class<E> enumClass)

读取缓冲区字节并返回由指定枚举类型的定义的相关的枚举常量。(以下类似)
abstract <E extendsEnum<E>> getEnum(intindex, Class<E> enumClass)
abstract <E extendsEnum<E>>getEnumInt(Class<E> enumClass)
abstract <E extendsEnum<E>>getEnumInt(int index, Class<E>enumClass)
abstract <E extendsEnum<E>>EnumSet<E>getEnumSet(Class<E> enumClass)
abstract <E extendsEnum<E>>EnumSet<E> getEnumSet(int index,Class<E> enumClass)
abstract <E extendsEnum<E>>EnumSet<E>getEnumSetInt(Class<E>enumClass)
abstract <E extendsEnum<E>>EnumSet<E> getEnumSetInt(int index,Class<E> enumClass)
abstract <E extendsEnum<E>>EnumSet<E>getEnumSetLong(Class<E>enumClass)
abstract <E extendsEnum<E>>EnumSet<E> getEnumSetLong(int index,Class<E> enumClass)
abstract <E extendsEnum<E>>EnumSet<E>getEnumSetShort(Class<E>enumClass)
abstract <E extendsEnum<E>>EnumSet<E> getEnumSetShort(int index,Class<E> enumClass)
abstract <E extendsEnum<E>> EgetEnumShort(Class<E>enumClass)
abstract <E extendsEnum<E>> EgetEnumShort(int index, Class<E>enumClass)

abstract float getFloat()
用于读取 float 值的相对 get 方法。
abstract float getFloat(int index)
用于读取 float 值的绝对 get 方法。

abstract float getHexDump()
用于读取十六进制值的相对 get 方法。
abstract float getHexDump(int index)
用于读取十六进制值的绝对 get 方法。
abstract int getInt()
用于读取 int 值的相对 get 方法。
abstract int getInt(int index)
用于读取 int 值的绝对 get 方法。
abstract long getLong()
用于读取 long 值的相对 get 方法。
abstract long getLong(int index)
用于读取 long 值的绝对 get 方法。

abstract int getMediumInt()

用于读取 MediumInt 值的绝对 get 方法。
abstract int getMediumInt(int index)

用于读取 MediumInt 值的绝对 get 方法。
abstract Object getObject()

用于读取MediumInt 值的绝对 get 方法。
abstract Object getObject(ClassLoaderclassLoader)
用于读取 MediumInt 值的绝对 get 方法。

abstract String getPrefixedString(CharsetDecoder decoder)

用于读取其中十六位数据根据解码器转换后的值的绝对 get 方法。
abstract String getPrefixedString(int prefixLength, CharsetDecoderdecoder)

用于读取其中十六位数据根据解码器转换后的值的绝对 get 方法。

abstract short getUnsigned(int index)
abstract long getUnsignedInt()
abstract long getUnsignedInt(int index)
abstract int getUnsignedMediumInt()
abstract int getUnsignedMediumInt(int index)
abstract int getUnsignedShort()
abstract int getUnsignedShort(int index)

abstract IoBuffer put(byte b)
abstract IoBuffer put(byte[] src)
abstract IoBuffer put(byte[] src, int offset, intlength)
abstract IoBuffer put(ByteBuffer src)
abstract IoBuffer put(int index, byte b)
abstract IoBuffer put(IoBuffer src)
abstract IoBuffer putChar(char value)
abstract IoBuffer putChar(int index, charvalue)
abstract IoBuffer putDouble(double value)
abstract IoBuffer putDouble(int index, doublevalue)
abstract IoBuffer putEnum(Enum<?>e)
abstract IoBuffer putEnum(int index,Enum<?> e)
abstract IoBuffer putEnumInt(Enum<?>e)
abstract IoBuffer putEnumInt(int index,Enum<?> e)
abstract <E extendsEnum<E>>IoBufferputEnumSet(int index, Set<E>set)
abstract <E extendsEnum<E>>IoBufferputEnumSet(Set<E> set)
abstract <E extendsEnum<E>>IoBufferputEnumSetInt(int index, Set<E>set)
abstract <E extendsEnum<E>>IoBufferputEnumSetInt(Set<E> set)
abstract <E extendsEnum<E>> IoBufferputEnumSetLong(int index, Set<E>set)
abstract <E extendsEnum<E>> IoBufferputEnumSetLong(Set<E> set)
abstract <E extendsEnum<E>> IoBufferputEnumSetShort(int index, Set<E>set)
abstract <E extendsEnum<E>> IoBufferputEnumSetShort(Set<E> set)
abstract IoBufferputEnumShort(Enum<?> e)
[转载]Mina:core-->buffer
abstract IoBuffer putEnumShort(int index,Enum<?> e)
abstract IoBuffer putFloat(float value)
abstract IoBuffer putFloat(int index, floatvalue)
abstract IoBuffer putInt(int value)
abstract IoBuffer putInt(int index, intvalue)
abstract IoBuffer putLong(int index, longvalue)
abstract IoBuffer putLong(long value)
abstract IoBuffer putMediumInt(int value)
abstract IoBuffer putMediumInt(int index, int value)
abstract IoBuffer putObject(Object o)
abstract IoBuffer putPrefixedString(CharSequence in, CharsetEncoderencoder)
abstract IoBuffer putPrefixedString(CharSequence in, intprefixLength, CharsetEncoder encoder)
abstract IoBuffer putPrefixedString(CharSequence val, intprefixLength, int padding, bytepadValue,CharsetEncoderencoder)
abstract IoBuffer putPrefixedString(CharSequence in, intprefixLength, int padding,CharsetEncoderencoder)
abstract IoBuffer putShort(int index, shortvalue)

abstract IoBuffer putShort(short value)
abstract IoBuffer putString(CharSequence val, CharsetEncoderencoder)
abstract IoBuffer putString(CharSequence val, int fieldSize,CharsetEncoder encoder)
abstract IoBuffer putUnsigned(byte value)
abstract IoBuffer putUnsigned(int value)
abstract IoBuffer putUnsigned(int index, byte value)
abstract IoBuffer putUnsigned(int index, int value)
abstract IoBuffer putUnsigned(int index, long value)
abstract IoBuffer putUnsigned(int index, short value)
abstract IoBuffer putUnsigned(long value)
abstract IoBuffer putUnsigned(short value)
abstract IoBuffer putUnsignedInt(byte value)
abstract IoBuffer putUnsignedInt(int value)
abstract IoBuffer putUnsignedInt(int index, byte value)
abstract IoBuffer putUnsignedInt(int index, int value)
abstract IoBuffer putUnsignedInt(int index, long value)
abstract IoBuffer putUnsignedInt(int index, short value)
abstract IoBuffer putUnsignedInt(long value)
abstract IoBuffer putUnsignedInt(short value)
abstract IoBuffer putUnsignedShort(byte value)
abstract IoBuffer putUnsignedShort(int value)

abstract IoBuffer putUnsignedShort(int value)
abstract IoBuffer putUnsignedShort(int index, byte value)
abstract IoBuffer putUnsignedShort(int index, int value)
abstract IoBuffer putUnsignedShort(int index, long value)
abstract IoBuffer putUnsignedShort(int index, short value)
abstract IoBuffer putUnsignedShort(long value)
abstract IoBuffer putUnsignedShort(short value)

abstract boolean hasArray()

判断是否可通过一个可访问的 byte 数组实现此缓冲区。
abstract boolean hasRemaining()

告知在当前位置和限制之间是否有元素。
abstract int indexOf(byte b)

返回指定字节首次出现的位置
abstract boolean isAutoExpand()

判断是否可自拓展
abstract boolean isAutoShrink()

判断是否可压缩
abstract booleanisDerived()
判断是否衍生

abstract boolean isReadOnly()

判断是否只读

abstract int limit()

返回此缓冲区的限制。
abstract IoBuffer limit(int newLimit)

设置此缓冲区的限制。如果位置大于新的限制,则将它设置为新限制。

如果标记已定义且大于新限制,则丢弃该标记。
abstract IoBuffer mark()

在此缓冲区的位置设置标记。
abstract int markValue()

返回当前标识的位置
abstract int minimumCapacity()

返回最小容量
abstract IoBuffer minimumCapacity(int minimumCapacity)

设置此缓冲区是用来确定缓冲区缩小bycompact()和运行的新能力最小容量。

默认值是缓冲区的初始容量。
protected static int normalizeCapacity(int requestedCapacity)

设置此缓冲区是用来确定缓冲区缩小bycompact()和运行的新能力最小容量。

默认值是缓冲区的初始容量。

abstract ByteOrder order()

获取此缓冲区的字节顺序。

abstract IoBuffer order(ByteOrder bo)

修改此缓冲区的字节顺序。

abstract int position()

此缓冲区的位置

abstract IoBuffer position(intnewPosition)

设置此缓冲区的位置。如果标记已定义且大于新的位置,则丢弃该标记。

abstract boolean prefixedDataAvailable(int prefixLength)

判断是否可去前缀串

abstract boolean prefixedDataAvailable(int prefixLength, intmaxDataLength)

判断是否可去前缀串

abstract int remaining()

返回当前位置与限制之间的元素数。

abstract IoBuffer reset()

将此缓冲区的位置重置为以前标记的位置。

调用此方法不更改也不丢弃标记的值。

abstract IoBuffer rewind()

重绕此缓冲区。将位置设置为 0 并丢弃标记。

abstract IoBuffer setAutoExpand(boolean autoExpand)

设置自动拓展。
abstract IoBuffer setAutoShrink(boolean autoShrink)

设置自动压缩。

abstract IoBuffer shrink()

压缩。

abstract IoBuffer skip(int size)

跳到指定位置

abstract IoBuffer slice()

创建新的字节缓冲区,其内容是此缓冲区内容的共享子序列。

abstract IoBuffer sweep()

清空缓冲流,以NUL填充。position归零,limit设置为capacity,标识不明确。

abstract IoBuffer sweep(byte value)

清空缓冲流,以value填充。position归零,limit设置为capacity,标识不明确。

IoBufferWrapper

描述:包装buffer并代理实现所有操作

实现:继承IoBuffer,并对其所有方法进行实现。

AbstractIoBuffer

描述:IoBuffer的基本实现,更多方法可通过其子类来实现。

实现:继承IoBuffer,并对其基本方法进行实现。

IoBufferAllocator

描述:分配器接口,分配并管理IoBuffer

IoBuffer allocate(int capacity, booleandirect)
分配指定大小的缓冲区。

ByteBuffer allocateNioBuffer(int capacity, boolean direct)

分配指定大小的NIO缓冲区。
void dispose()

清除分配器。
IoBuffer wrap(ByteBuffer nioBuffer)

将特殊的NioBuffer包装成IoBbuffer

SimpleBufferAllocator

描述:简单的缓冲分配器

实现:继承IoBufferAllocator,实现其四个接口。

CachedBufferAllocator

描述:在可自拓展的缓冲流中隐藏哪些类似重复利用的缓冲区

实现:继承IoBufferAllocator,实现其四个接口。自定义两个接口,

public int getMaxCachedBufferSize() 获得最大缓冲区的大小

public int getMaxPoolSize() 获得最大池的大小

IoBufferHexDumper

描述:提供可将IoBuffer转换为16进制格式字符串的工具方法。

方法:public static String getHexdump(IoBuffer in, intlengthLimit)

BufferDataException

描述:当IoBuffer容器里的数据损坏时抛出异常。

实现:继承RuntimeException并复写其四个构造方法。

  

爱华网本文地址 » http://www.aihuau.com/a/25101013/159585.html

更多阅读

转载 原创:加拿大皇家银行RBC开户

留用原文地址:原创:加拿大皇家银行RBC开户作者:小丑样第一:电话得到的解疑 1.加币以外的钱汇到自己的账户到了加都变成加元所以如果有其他币种可以随身携带到当地开通外币账户 2. 北京的分行不接受从中国国内的汇款的 而是开户之后给你

转载 不可思议:一切佛心大无畏八字真言

原文地址:不可思议:一切佛心大无畏八字真言作者:秋夜雨顶礼根本上师噶玛仁波切!顶礼莲花生大士!顶礼十方三世一切佛菩萨!顶礼十方三世一切法!顶礼十方三世一切僧!愿看到本文的各位朋友都能够早日解脱!本文转载于:http://blog.sina.com.cn/d

转载 原创:生命中不能承受之轻——电影《布拉格之恋》随想

原文地址:原创:生命中不能承受之轻——电影《布拉格之恋》随想作者:无聊才读书昨天晚上,在家里又看了一遍电影《布拉格之恋》的完整碟片,感受颇多。这部电影是根据诺贝尔文学奖获得者、捷克著名作家米兰昆德拉的小说《生命不能承受之轻

转载 翻译:老单身汉的睡帽下

原文地址:翻译:老单身汉的睡帽(下)作者:春笑翻翻一年,二年,三年过去了,在此期间他只收到两封信。一封是邮递员送来的,另一封是旅行商捎来的。路途遥远而又艰难,要拐无数道弯,还要穿过几个小镇和村庄。安冬尼和莫利常常听别人讲特斯坦和伊索达的

转载 实拍:石家庄“树洞女孩”现场作画

原文地址:实拍:石家庄“树洞女孩”现场作画作者:落榜进士像全国大多数北方城市一样,雾霾,也笼罩着这座北方的省会城市——石家庄。时间早已是初春,可是作为河北省省会的石家庄,却难见绿意。如今,一个人的出现却改变了这一切。她装着简单绘

声明:《转载 Mina:core-->buffer》为网友薄灯少年分享!如侵犯到您的合法权益请联系我们删除