Mark标记的使用

package com.nio;

import java.nio.ByteBuffer;

/**
 * 缓存区(Buffer):在java NIO 中负责数据点额存取。缓存区就是数组。用于存储不同数据类型的数据
   Mark标记
  规律:  0<=mark<=position<=limit<=capacity
 */
public class TestBufferMark {
    public static void main(String[] args) {
        String str="abcde";
        //1.分配一个指定大小的缓存区
        ByteBuffer buffer = ByteBuffer.allocate(1024);
        buffer.put(str.getBytes());
        buffer.flip();
        byte[] dst = new byte[buffer.limit()];
        buffer.get(dst,0,2);
        System.out.println(buffer.position());
        System.out.println(new String(dst,0,2));
        //mark():标记
        buffer.mark();
        buffer.get(dst,2,2);
        System.out.println(buffer.position());
        System.out.println(new String(dst,2,2));
        //reset():恢复到mark的位置
        buffer.reset();
        System.out.println(buffer.position());
        //判断缓存区中是否还有可以操作的数据
        if(buffer.hasRemaining()){
            //获取缓存区中可以操作的数量
            System.out.println(buffer.remaining());
        }

    }
}

  

运行结果:
2
ab
4
cd
2
3

  

package com.nio;

import java.nio.ByteBuffer;

/**
 * 缓存区(Buffer:java NIO 中负责数据点额存取。缓存区就是数组。用于存储不同数据类型的数据
   Mark标记
  规律:  0<=mark<=position<=limit<=capacity
 */
public class TestBufferMark {
    public static void main(String[] args) {
        String str="abcde";
        //1.分配一个指定大小的缓存区
        ByteBuffer buffer = ByteBuffer.allocate(1024);
        buffer.put(str.getBytes());
        buffer.flip();
        byte[] dst = new byte[buffer.limit()];
        buffer.get(dst,0,2);
        System.out.println(buffer.position());
        System.out.println(new String(dst,0,2));
        //mark():标记
        buffer.mark();
        buffer.get(dst,2,2);
        System.out.println(buffer.position());
        System.out.println(new String(dst,2,2));
        //reset():恢复到mark的位置
        buffer.reset();
        System.out.println(buffer.position());
        //判断缓存区中是否还有可以操作的数据
        if(buffer.hasRemaining()){
            //获取缓存区中可以操作的数量
            System.out.println(buffer.remaining());
        }

    }
}

 

原文地址:https://www.cnblogs.com/dongyaotou/p/14414187.html