IO流必知必会(19)——NIO与java.nio.Buffer类

传统的输入/输出流都是阻塞式(如果数据源没有数据,读操作将会阻塞线程),而且都是以字节为单位对数据进行读写,效率不高。jdk1.4开始提供NIO,对输入/输出功能进行改进。

NIO采用内存映射文件来处理输入/输出,将文件或者文件的一段映射到内存中,这样就可以像访问内存一样来访问文件了,速度得以提升。java.nio包中的Buffer类用于提供缓存。基本数据类型都有对应的Buffer实现类,较为常用的是ByteBuffer,CharBuffer。

Buffer中有四个比较重要的参数,可参考下图。当Buffer装入数据后,调用filp(),limit将置为position,position置0,为进行输出做好准备。当输出数据结束后,调用clear(),不需要清空缓存中内容,而是将limit置为capacity,position置为0,为重新输入数据做好准备。

其基本用法参考下列代码,注意get()将移动position,而get(int index)不会。

public class BufferTest {
    public static void main(String[] args) {
        CharBuffer cb = CharBuffer.allocate(8);
        System.out.println(cb.capacity()); // 8
        System.out.println(cb.limit()); // 8
        System.out.println(cb.position()); // 0
        cb.put('a');
        cb.put('b');
        cb.put('c');
        System.out.println(cb.position()); // 3
        cb.flip();
        System.out.println(cb.limit());
        System.out.println(cb.position());
        System.out.println(cb.get()); // a
        cb.clear();
        System.out.println(cb.limit()); // 8
        System.out.println(cb.position()); // 0
        System.out.println(cb.get(2)); // c
        System.out.println(cb.position()); // 0
    }
}
java全栈日日学 文章被收录于专栏

java全栈每日必学,不要高估自己一年能做的事,不要低估自己十年能做的事

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-16 14:00
白火同学:其实你可以了解一下HR在Boss聊天的机制,想赢牌的前提是先会玩牌。 如果HR长时间没有理你,有可能是因为你的消息被其他应聘者的消息给挤到下面了,HR从上到下有可能只看个三四百个人就要到理想数量的简历了,而你恰好没有被看到,时间一长,你的消息在越来越下面。这种情况就需要你自己活跃一下,把消息提上去。 也可能是HR招的合适的人选了,但会一直挂着岗位,为了省重新开招聘岗位的钱,方便后面随时修改招聘要求。 当然也可能是HR吃饱了没事耍你玩,要了你的简历又不看,就看你自己怎么理解了。
点赞 评论 收藏
分享
07-18 15:02
门头沟学院 Java
刚打开网申页面就不想填了,还是不要为难自己了
poppinzhan...:多益老行业毒瘤了,碰到徐波这种恶心的烂人,去了也是受罪。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务