Java NIO 学习笔记 ByteBuffer (早期笔记)
(参考 “ibm nio入门”)
在 NIO 库中,所有数据都是用缓冲区处理的。在读取数据时,它是直接读到缓冲区中的。在写入数据时,它是写入到缓冲区中的。任何时候访问 NIO 中的数据,都是将它放到缓冲区中。缓冲区实质上是一个数组。通常它是一个字节数组,但是也可以使用其他种类的数组。但是一个缓冲区不仅仅是一个数组。缓冲区提供了对数据的结构化访问,而且还可以跟踪系统的读/写进程。
buffer其实只是一个美化了的数组。
状态变量
跟踪数据的状态情况使buffer可以自己管理数据资源
position: 其实是指从buffer读取或写入buffer的下一个元素位置。比如,已经写入buffer 3个元素那那么position就是指向第4个位置,即position设置为3(数组从0开始计)。
limit:还有多少数据需要从buffer中取出,或还有多少空间可以放入。postition总是<=limit。
capacity: 表示buffer本身底层数组的容量。limit绝不能>capacity。
filp():作了两件事情:1.将limit指向现在position的位置 2.将position设置为0 (limit=position;position=0)
这个过程可以使之前buffer写入数据时改变的状态变为可以“准备读取”。因为之前写到buffer中的数据就是position 到 limit-1 两个位置之间(limit指向最后一个数据的后一个位置)。
clear():
也作了两件事:1. limit=capacity 2.position=0
这个过程可以使buffer读取数据时改变的状态改变为“清空并准备写入”。
访问方法
以下都以bytebuffer为例
get():
前三个get方法是相对读取。就是相对于位置状态来读取数据,并且会改变position位置状态。
byte get();
ByteBuffer get(byte dst[]);//读取bytebuffer中数据写入 dst[]
ByteBuffer get(byte dst[],int offset, int length);
该读取数据是绝对读取(一个byte),即会忽略limit和position值。并完全绕过了缓冲区的状态统计方法。
就是说不会改变buffer内部的位置状态。
byte get(int index);
put();
与get类似 前四个put方法是相对读取。即受position 以及limit影响,并且会改变 position。
ByteBuffer put( byte b );
ByteB
相关文档:
一、
Java
基础
第
01
题:
作用域
public,private,protected,
以及不写时的区别
第
02
题:
Anonymous Inner Class (
匿名内部类
)
是否可以
extends(
继承
)
其它类,是否可以
implements(
实现
......
java得到当前时间
Java基础 2009-06-02 21:34:18 阅读1289 评论0 字号:大中小
//String nowTime=new SimpleDateFormat("yyyyMMddHHmm").format(new java.util.Date());
//System.out.println(nowTime);
import java.text.Sim ......
原文引自http://hi.baidu.com/heyinjie/blog/item/608ee7108f1f4802203f2e35.html
打个比方:一个object就像一个大房子,大门永远打开。房子里有很多房间(也就是方法)。这些房间有上锁的(synchronized方法), 和不上锁之分(普通方法)。房门口放着一把钥匙(key),这把钥匙可以打开所有上锁的房间。另外我把所有想 ......
初学JAVA,好不容易解决了这个数据库连接问题,这个主要是有两个问题,一个是JDBC-odbc的问题,如果没有解决好数据源配置,绝对是有容易出问题的,假设你使用的是access的数据库,这是网上的一个例子的语句
String dburl="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=database.mdb";
其实并不需要那么长,假 ......