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
相关文档:
Blog from http://forum.xda-developers.com/showthread.php?t=552846
I've just pushed new Hero Java app into my rogers build and it works fine.
What you basically need is:
Jbed.apk (install with adb install)
libjbedvm.so (adb push /system/lib) - remember to remount as RW.
I strongly suggest to ......
您查询的关键词是: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;
......
很多人都知道在swing中加入jPopupMenu组件后可以在鼠标的驱动下探出一个菜单,但是,如果用一般做法,在界面上单击左键也会弹出菜单,那么有没有办法在只有单击右键才弹出菜单呢?其实只是用到了一个小技巧。 你的弹出鼠标菜单鼠标驱动选择 MouseReleased 然后再在监听事件的方法中加入下面的代码就可以了: if(evt.isPop ......
1. 声明(Declarations)
5.1 每行声明变量的数量(Number Per Line)
推荐一行一个声明,因为这样以利于写注释。亦即,
int level; // indentation level
int size; // size of table
要优于,
int level, size;
不要将不同类型变量的声明放在同一行,例如:
int foo, foo ......