java中的缓冲区(直接缓冲区、非直接缓冲区等)

java中的缓冲区(直接缓冲区、非直接缓冲区等)

ID:8975166

大小:20.34 KB

页数:5页

时间:2018-04-13

java中的缓冲区(直接缓冲区、非直接缓冲区等)_第1页
java中的缓冲区(直接缓冲区、非直接缓冲区等)_第2页
java中的缓冲区(直接缓冲区、非直接缓冲区等)_第3页
java中的缓冲区(直接缓冲区、非直接缓冲区等)_第4页
java中的缓冲区(直接缓冲区、非直接缓冲区等)_第5页
资源描述:

《java中的缓冲区(直接缓冲区、非直接缓冲区等)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、·Java中的缓冲区(直接缓冲区、非直接缓冲区等)如果将同步I/O方式下的数据传输比做数据传输的零星方式(这里的零星是指在数据传输的过程中是以零星的字节方式进行的),那么就可以将非阻塞I/O方式下的数据传输比做数据传输的集装箱方式(在字节和低层数据传输之间,多了一层缓冲区,因此,可以将缓冲区看做是装载字节的集装箱)。  如果将同步I/O方式下的数据传输比做数据传输的零星方式(这里的零星是指在数据传输的过程中是以零星的字节方式进行的),那么就可以将非阻塞I/O方式下的数据传输比做数据传输的集装箱方式(在字节和低层数据传输之间,多了

2、一层缓冲区,因此,可以将缓冲区看做是装载字节的集装箱)。大家可以想象,如果我们要运送比较少的货物,用集装箱好象有点不太合算,而如果要运送上百吨的货物,用集装箱来运送的成本会更低。在数据传输过程中也是一样,如果数据量很小时,使用同步I/O方式会更适合,如果数据量很大时(一般以G为单位),使用非阻塞I/O方式的效率会更高。因此,从理论上说,数据量越大,使用非阻塞I/O方式的单位成本就会越低。产生这种结果的原因和缓冲区的一些特性有着直接的关系。在本节中,将对缓冲区的一些主要特性进行讲解,使读者可以充分理解缓冲区的概念,并能通过缓冲区来

3、提高程序的执行效率。  创建缓冲区  Java提供了七个基本的缓冲区,分别由七个类来管理,它们都可以在java.nio包中找到。这七个类如下所示:   ByteBuffer   ShortBuffer   IntBuffer   CharBuffer   FloatBuffer   DoubleBuffer   LongBuffer   st1":*{behavior:url(#ieooui) }  这七个类中的方法类似,只是它们的返回值或参数和相应的简单类型相对应,如ByteBuffer类的get方法返回了byte类型的数据,

4、而put方法需要一个byte类型的参数。在CharBuffer类中的get和put方法返回和传递的数据类型就是char。这七个类都没有public构造方法,因此,它们不能通过new来创建相应的对象实例。这些类都可以通过两种方式来创建相应的对象实例。  1.通过静态方法allocate来创建缓冲区。  这七类都有一个静态的allocate方法,通过这个方法可以创建有最大容量限制的缓冲区对象。allocate的定义如下:  ByteBuffer类中的allocate方法: public static ByteBuffer alloc

5、ate(int capacity)  IntBuffer类中的allocate方法: public static IntBuffer allocate(int capacity)  其他五个缓冲区类中的allocate方法定义和上面的定义类似,只是返回值的类型是相应的缓冲区类。  allocate方法有一个参数capacity,用来指定缓冲区容量的最大值。capacity的不能小于0,否则会抛出一个IllegalArgumentException异常。使用allocate来创建缓冲区,并不是一下子就分配给缓冲区capacity大

6、小的空间,而是根据缓冲区中存储数据的情况来动态分配缓冲区的大小(实际上,在低层Java采用了数据结构中的堆来管理缓冲区的大小),因此,这个capacity可以是一个很大的值,如1024*1024(1M)。allocate的使用方法如下: ByteBuffer byteBuffer = ByteBuffer.allocate(1024);   IntBuffer intBuffer = IntBuffer.allocate(1024);  在使用allocate创建缓冲区时应用注意,capacity的含义随着缓冲区的不同而不同。如

7、创建字节缓冲区时,capacity指的是字节数。而在创建整型(int)缓冲区时,capacity指的是int型值的数目,如果转换成字数,capacity的值应该乘4。如上面代码中的intBuffer缓冲区最大可容纳的字节数是1024*4=4096个。  2.通过静态方法wrap来创建缓冲区。  使用allocate方法可以创建一个空的缓冲区。而wrap方法可以利用已经存在的数据来创建缓冲区。wrap方法可以将数组直接转换成相应类型的缓冲区。wrap方法有两种重载形式,它们的定义如下:  ByteBuffer类中的wrap方法: 

8、  public static ByteBuffer wrap(byte[] array)   public static ByteBuffer wrap(byte[] array, int offset, int length)  IntBuffer类中的wr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。