zoukankan      html  css  js  c++  java
  • NIO组件之buffer

    Java NIO指的是new IO ,相对OIO,也称non-blocking IO,对应四种基本IO类型中的IO多路复用,主要有有三大核心组件,Channel(管道),Buffer(缓冲区),selector(选择器)

    基本操作流程 

    allcocate创建实例对象--》put写入数据--》flip切换到读取模式--》get读取数据--》clear切回写入模式

    如下注释:

    package com.example.demo;
    
    import java.nio.IntBuffer;
    
    /**
     * Created by Administrator on 2019/9/22.
     */
    public class NioTest {
        static IntBuffer intBuffer=null;
        public static void main(String[] args) {
            intBuffer=IntBuffer.allocate(20);//默认为写入模式
            print();//创建缓冲区p:l:c 0:20:20 p为position l为limit c为capacity
            put();//插入5个数
            print();//p:l:c  5:20:20 写入模式下写入数据只是改变postition的值
            get(2);//输出两个0
            print();//p:l:c 7:20:20 没有切换模式的情况下,get也变为在末尾添加两个0
    
            flip();//p:l:c 0:7:20 翻转,切换为读取模式 
            get(4);
    
            print();//p:l:c 4:7:20
            get(2);
            print();//p:l:c 6:7:20
    // intBuffer.rewind() //倒带重读 p:l:c 0:7:20 clear();//p:l:c 0:20:20 切回写入模式,并清空
    // compact();//p:l:c 1:20:20 切回写入模式,保留未读取的数据 print();
          }
    public static void put(){ for (int i = 0; i < 5; i++) { intBuffer.put(i); } System.out.println("putting data"); } public static void print(){ System.out.println("position=="+intBuffer.position()); System.out.println("limit=="+intBuffer.limit()); System.out.println("capacity=="+intBuffer.capacity()); } public static void flip(){ intBuffer.flip(); System.out.println("flipping"); } public static void clear(){ intBuffer.clear(); System.out.println("clearing the buffer"); } public static void compact(){ intBuffer.compact(); System.out.println("compacting the buffer"); } public static void get(int n){ System.out.println("starting to read"); for (int i = 0; i < n; i++) { System.out.println("read data=="+intBuffer.get()); } System.out.println("ending to read"); } }

    输出

    position==0
    limit==20
    capacity==20
    putting data
    position==5
    limit==20
    capacity==20
    starting to read
    read data==0
    read data==0
    ending to read
    position==7
    limit==20
    capacity==20
    flipping
    starting to read
    read data==0
    read data==1
    read data==2
    read data==3
    ending to read
    position==4
    limit==7
    capacity==20
    starting to read
    read data==4
    read data==0
    ending to read
    position==6
    limit==7
    capacity==20
    clearing the buffer
    position==0
    limit==20
    capacity==20

  • 相关阅读:
    史上最全分布式数据库概述
    MySQL高可用实现:主从结构下ProxySQL中的读写分离
    【CS231n】斯坦福大学李飞飞视觉识别课程笔记(十七):神经网络笔记3(下)
    【CS231n】斯坦福大学李飞飞视觉识别课程笔记(十六):神经网络笔记3(上)
    20万DBA都在关注的11个问题
    记一次服务器执行MySQL耗时问题
    Python爬虫入门教程 66-100 对微博登录好奇嘛,用Python试试
    挥手洒衰泪
    长戟如霜大旆红
    我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。
  • 原文地址:https://www.cnblogs.com/pu20065226/p/11569387.html
Copyright © 2011-2022 走看看