zoukankan      html  css  js  c++  java
  • Java NIO Buffer详解

    一、ByteBuffer类型化的put与get方法

    /**
     * ByteBuffer类型化的put与get方法
     */
    public class NioTest5 {
    
        public static void main(String[] args) {
            ByteBuffer buffer = ByteBuffer.allocate(64);
    
            buffer.putInt(5);
            buffer.putLong(500000000L);
            buffer.putDouble(13.456);
            buffer.putChar('你');
            buffer.putShort((short) 3);
    
            buffer.flip();
    
            System.out.println(buffer.getInt());
            System.out.println(buffer.getLong());
            System.out.println(buffer.getDouble());
            System.out.println(buffer.getChar());
            System.out.println(buffer.getShort());
        }
    }
    

      put和get的类型要一致。如第一个是putInt, 输出的使用第一个要用getInt。

    二、Slice Buffer

    /**
     * Slice Buffer和原Buffer共享底层数组,任一一个改变,另外一个也会改变
     */
    public class NioTest6 {
    
        public static void main(String[] args) {
            ByteBuffer buffer = ByteBuffer.allocate(10);
            for(int i = 0; i < buffer.capacity(); ++i){
                buffer.put((byte)i);
            }
    
            buffer.position(2);
            buffer.limit(6);
    
            ByteBuffer sliceBuffer = buffer.slice();
    
            for(int i = 0; i < sliceBuffer.capacity(); ++i){
                byte b = sliceBuffer.get(i);
                b *= 2;
                sliceBuffer.put(i,  b);
            }
    
            buffer.position(0);
            buffer.limit(buffer.capacity());
    
           while (buffer.hasRemaining()){
               System.out.println(buffer.get());
           }
        }
    }
    

      

    三、只读Buffer

    /**
     * 只读buffer,我们可以随时将一个普通Buffer调用asReadOnlyBuffer方法返回一个只读Buffer
     * 但不能将一个只读Buffer转换为读写Buffer
     */
    public class NioTest7 {
    
        public static void main(String[] args) {
            ByteBuffer buffer = ByteBuffer.allocate(10);
    
            System.out.println(buffer.getClass());
            for(int i = 0; i < buffer.capacity(); ++i){
                buffer.put((byte)i);
            }
    
            ByteBuffer readonlyBuffer = buffer.asReadOnlyBuffer();
            System.out.println(readonlyBuffer.getClass());
    
            readonlyBuffer.position(0);
            readonlyBuffer.put((byte)2);
    
    
        }
    }
    

      对只读Buffer进行修改,将抛出异常

  • 相关阅读:
    duilib中各控件响应的消息类型
    CoInitialize()、CoInitializeEx()和AfxOleInit()区别联系
    Linux下反斜杠号""引发的思考
    人生规划和GTD——“知”、“得”与“合”
    一次失败的面试——IBM电话面试
    Duilib介绍以及各个类的简介
    Linux与Windows中动态链接库的分析与对比
    VC++创建、调用dll的方法步骤
    网络对抗 Exp0 Kali安装 Week1
    2018-2019-1 20165226_20165310_20165315 实验五 通讯协议设计
  • 原文地址:https://www.cnblogs.com/linlf03/p/11337082.html
Copyright © 2011-2022 走看看