zoukankan      html  css  js  c++  java
  • 读数据

    读取数据的小案例:

    package com.nio;
    
    import java.nio.ByteBuffer;
    
    /**
     * 一、缓存区(Buffer):在java NIO 中负责数据点额存取。缓存区就是数组。用于存储不同数据类型的数据
     *
     * 根据数据类型不同(boolean除外),提供了相应类型的缓存区:
     * ByteBuufer
     * CharBuffer
     * ShortBuffer
     * IntBuffer
     * LongBuffer
     * FloatBuffer
     * DoubleBuffer
     *
     * 上述缓存区的管理方式几乎是一致的,都是通过allocate()方法获取缓存区的
     *
     * 二、缓存区数据存取的两个方法  (缓存区的底层说白了就是数组)
     * put():存入数据到缓存区中
     * get(): 获取缓存区中的数据
     *
     * 三、缓存区中的四个核心属性
     *     private int mark = -1;//标记,表示记录当前position的位置。可以通过reset()恢复到mark的位置
     *     private int position = 0;//位置,表示缓存区中正在操作数据的位置
     *     private int limit;//界限,表示缓存区中可以操作数据的大小,(limit后数据不能进行读写)
     *     private int capacity; //容量,表示缓存区中最大存储数据的容量,一旦声明不能改变
     *     position<=limit<=capacity
     */
    public class TestBuffer {
        public static void main(String[] args) {
            String str="abcde";
            //1.分配一个指定大小的缓存区
            ByteBuffer buffer = ByteBuffer.allocate(1024);
            System.out.println("-------------allocate()---------------");
            System.out.println(buffer.position());
            System.out.println(buffer.limit());
            System.out.println(buffer.capacity());
            //2.利用put() 存入数据到缓存区中
            buffer.put(str.getBytes());
            System.out.println("-------------put()---------------");
            System.out.println(buffer.position());
            System.out.println(buffer.limit());
            System.out.println(buffer.capacity());
    
            //3.切换到读取数据的模式
            buffer.flip();
            System.out.println("-------------flip()---------------");
            System.out.println(buffer.position());
            System.out.println(buffer.limit());
            System.out.println(buffer.capacity());
    
            //4.利用get()读取缓存区中的数据
            byte[] dst = new byte[buffer.limit()];
            buffer.get(dst);
            System.out.println(new String(dst,0,dst.length));
            System.out.println("-------------get()---------------");
            System.out.println(buffer.position());
            System.out.println(buffer.limit());
            System.out.println(buffer.capacity());
    
            //5.rewind():可重复读取数据
            buffer.rewind();
            System.out.println("-------------rewind()---------------");
            System.out.println(buffer.position());
            System.out.println(buffer.limit());
            System.out.println(buffer.capacity());
            //6.clear():清空缓存区,但是缓存区中的数据依然存在,但是出于一种“被遗忘”状态
            buffer.clear();
            System.out.println("-------------clear()---------------");
            System.out.println(buffer.position());
            System.out.println(buffer.limit());
            System.out.println(buffer.capacity());
    
            System.out.println((char) buffer.get());
    
        }
    }
    

      

    运行结果:
    -------------allocate()---------------
    0
    1024
    1024
    -------------put()---------------
    5
    1024
    1024
    -------------flip()---------------
    0
    5
    1024
    abcde
    -------------get()---------------
    5
    5
    1024
    -------------rewind()---------------
    0
    5
    1024
    -------------clear()---------------
    0
    1024
    1024
    A
    

      

  • 相关阅读:
    swift 关于闭包
    swift 多线程的使用
    线上故障解决流程解读
    coredata (转)
    归档
    NSSearchPathForDirectoriesInDomains
    【iOS开发-91】GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例(转载)
    Objective-C Runtime (Runtime Library)转发
    Mac电脑系统降级(转载)
    UILabel
  • 原文地址:https://www.cnblogs.com/dongyaotou/p/14414185.html
Copyright © 2011-2022 走看看