• java Channel filp compact


    import java.nio.ByteBuffer;
    
    //Listing 7-1. Copying Bytes from an Input Channel to an Output Channel
    
    public class ty {
    
        public static void main(String[] args) {
    
            ty t = new ty();
            ByteBuffer buffer = t.returnbb();
            System.out.println(buffer);
    ////        之所以调用ByteBuffer.flip()方法是因为在向ByteBuffer写入数据后,
    ////        position为缓冲区中刚刚读入的数据的最后一个字节的位置,
    ////        flip方法将limit值置为position值,position置0,
    ////        这样在调用get*()方法从ByteBuffer中取数据时就可以取到ByteBuffer中的有效数据
        //当读取时 从头开始,到limit处
            buffer.flip(); 
            
            while (buffer.hasRemaining()) {
                System.out.println((char) buffer.get());
            }
    
            
            buffer.flip(); 
            System.out.println("---------------------");
            //取出 一个元素  
            System.out.println((char) buffer.get());    
            
            System.out.println("---------------------");
            
    //        clear()与compact()方法
    //        一旦读完Buffer中的数据,需要让Buffer准备好再次被写入。
    //        可以通过clear()或compact()方法来完成。
    //        如果调用的是clear()方法,position将被设回0,limit被设置成capacity的值。
    //        换句话说,Buffer 被清空了。Buffer中的数据并未清除,
    //        只是这些标记告诉我们可以从哪里开始往Buffer里写数据。
    //        如果Buffer中有一些未读的数据,调用clear()方法,数据将“被遗忘”,
    //        意味着不再有任何标记会告诉你哪些数据被读过,哪些还没有。
    //        如果Buffer中仍有未读的数据,且后续还需要这些数据,但是此时想要先先写些数据,
    //        那么使用compact()方法。
    //        compact()方法将所有未读的数据拷贝到Buffer起始处。
    //        然后将position设到最后一个未读元素正后面。limit属性依然像clear()方法一样,
    //        设置成capacity。现在Buffer准备好写数据了,但是不会覆盖未读的数据
            
            //保留剩余元素  并添加新元素
            buffer.compact();
            System.out.println(buffer);
            buffer.put((byte)'m');
            
            buffer.flip(); 
            
            while (buffer.hasRemaining()) {
            System.out.println((char) buffer.get());
        }
            
        }
    
        public ByteBuffer returnbb() {
            ByteBuffer buffer = ByteBuffer.allocate(10);
            buffer.put((byte) 'H').put((byte) 'e').put((byte) 'l').put((byte) 'l')
                    .put((byte) 'o');
            buffer.put((byte) 'A');
            return buffer;
        }
    
    }

     output :

    java.nio.HeapByteBuffer[pos=6 lim=10 cap=10]
    H
    e
    l
    l
    o
    A
    ---------------------
    H
    ---------------------
    java.nio.HeapByteBuffer[pos=5 lim=10 cap=10]
    e
    l
    l
    o
    A
    m
  • 相关阅读:
    verilog BRAM 读写
    verilog 语法一 led 翻转
    面试 遇到 问题
    S32K144+UJA1169 (四 ) S32K144 SPI1 功能初始化
    S32K144+UJA1169 ( 三 ) S32K144 SPI1 功能初始化
    S32K144+UJA1169 ( 二 ) S32K144 SPI1 对应的引脚 初始化 为 SPI 功能
    S32K144+UJA1169 ( 一 ) 连接框架+1169 功能 说明
    编译 xboot
    make clean make[1]:sdl2-config:命令未找到
    lwip 内存配置和使用,以及 如何 计算 lwip 使用了多少内存?
  • 原文地址:https://www.cnblogs.com/rojas/p/5415716.html
Copyright © 2020-2023  润新知