JAVA NIO学习笔记 缓冲区的内部细节
缓冲区内部细节
状态变量
状态变量是前一节中提到的"内部统计机制"的关键。每一个读/写操作都会改变缓冲区的状态。通过记录和跟踪这些变化,缓冲区就能够内部地管理自己的资源。
可以用三个值指定缓冲区在任意时刻的状态:
position
limit
capacity
Position
缓冲区实际上就是美化了的数组。在从通道读取时,您将所读取的数据放到底层的数组中。 position变量跟踪已经写了多少数据。更准确地说,它指定了下一个字节将放到数组的哪一个元素中。因此,如果您从通道中读三个字节到缓冲区中,那么缓冲区的position将会设置为3,指向数组中第四个元素。
同样,在写入通道时,您是从缓冲区中获取数据。position值跟踪从缓冲区中获取了多少数据。更准确地说,它指定下一个字节来自数组的哪一个元素。因此如果从缓冲区写了5个字节到通道中,那么缓冲区的position将被设置为5,指向数组的第六个元素。
Limit
limit变量表明还有多少数据需要取出(在从缓冲区写入通道时),或者还有多少空间可以放入数据(在从通道读入缓冲区时)。
Capacity
缓冲区的capacity表明可以储存在缓冲区中的最大数据容量。实际上,它指定了底层数组的大小 — 或者至少是指定了准许我们使用的底层数组的容量。
position总是小于或者等于limit,limit 决不能大于 capacity。
访问方法
由于缓冲区并不单单是用来将输入管道中的数据拷贝至输出管道,同时还会涉及到数据的访问等。如何使用ByteBuffer类的get()和put()方法直接访问缓冲区中的数据?
ByteBuffer 类中有四个 get() 方法:
byte get();
ByteBuffer get( byte dst[] );
ByteBuffer get( byte dst[], int offset, int length );
byte get( int index );
ByteBuffer 类中有五个 put() 方法:
ByteBuffer put( byte b );
ByteBuffer put( byte src[] );
ByteBuffer put( byte src[], int offset, int length );
ByteBuffer put( ByteBuffer src );
ByteBuffer put( int index, byte b );
下面的内部循环概括了使用缓冲区将数据从输入通道拷贝到输出通道的过程。
while (true) {
buffer.clear();
int r = fcin.read( buffer );
if (r==-1) {
break;
}
buffer.flip();
fco
相关文档:
您查询的关键词是:newinstance object initargs 。如果打开速度慢,可以尝试快速版;如果想保存快照,可以添加到搜藏。
(百度和网页http://bbs.iaiai.com/forum/read.php?tid=2690的作者无关,不对其内容负责。百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面。)
主题 : java的反射 ......
Following codes will show you how to query the first record from DB using Java Data Bean. package com ;
import com.siebel.data.*;
import com.siebel.data.SiebelException;
public class DataBeanDemo {
private SiebelDataBean m_dataBean = null;
private SiebelBusObject m_busObject = null;
......
java中的封装
封装,一个对象和外界的联系应当通过一个统一的接口,应当公开的公开,应当隐藏的隐藏。(对象的属性应当隐藏),一个对象的内部是透明的,就是把对象内部的可透明性和隐藏的特性区分开,该透明的透明,该隐藏的隐藏。
(封装的属性)java中类的属性的访问权限 ......
1. Java中除了static和final方法外,其他所有的方法都是运行时绑定的。private方法都被隐式指定为final的,因此final的方法不会在运行时绑定。当在派生类中重写基类中static、final、或private方法时,实质上是创建了一个新的方法。
2.在派生类中,对于基类中的pr ......
1. 空白(White Space)
7.1 空行(Blank Lines)
空行将逻辑相关的代码段分隔开,以提高可读性。下列情况应该总是使用两个空行:
·一个源文件的两个片段(section)之间
·类声明和接口声明之间
下列情况应该总是使用一个空行:
·两个方法之间
·方 ......