ByteBuffer詳解


注意:一定要了解這個緩沖類的幾個方法和那幾個字段。不然你不會明白的。

字段:  position ,limit ,mark
方法:clear(), hasRemaining(),flip()

推薦博客:講的很詳細 https://www.cnblogs.com/jiduoduo/p/6397454.html

看代碼:

package Test;

import org.junit.Test;

import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;

/**
 * Created by 敲代碼的卡卡羅特
 * on 2018/8/12 0:49.
 */
public class ByteBufferDemo {
    //主要通過讀取文件內容,寫到ByteBuffer里,然后再從ByteBuffer對象中獲取數據,顯示到控制台

    public static void  readFile(String fileName) {
        try {
            RandomAccessFile randomAccessFile = new RandomAccessFile(fileName, "rw");
            FileChannel fileChannel = randomAccessFile.getChannel();
            ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
            while(fileChannel.read(byteBuffer)>0){
                //把ByteBuffer從寫模式,轉變成讀取模式,即使把position的位置變成0,limit的位置變成position。因為這時候
                //已經把數據讀到緩沖區了,所以要復位一下,才能讀。
                byteBuffer.flip();
                //下面這兩個是把緩沖區的數據打印下來
                Charset charset = Charset.forName("UTF-8");
                System.out.println(charset.newDecoder().decode(byteBuffer).toString());
                //這個並不是把緩沖區的數據清除,看源碼就知道了,還是指針的位移。把position為0,把limit為緩沖區的設置的最大限制
                byteBuffer.clear();
            }
            fileChannel.close();
            randomAccessFile.close();
        }  catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Test
    public void test(){
        readFile("G:\\IDEAworkspace\\springboot-jpa\\src\\test\\java\\Test\\Base64.java");
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM