注意:一定要了解這個緩沖類的幾個方法和那幾個字段。不然你不會明白的。
字段: 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"); } }