Java NIO緩衝區


緩衝區(Buffers)在java.nio包中定義。 它定義了所有緩衝區通用的核心功能:限制,容量和當前位置。

Java NIO緩衝區用於與NIO通道進行互動。這是寫入資料的記憶體塊,以便在稍後再次進行讀取。 記憶體塊用NIO緩衝物件包裝,這樣可以提供更簡單的方法來處理記憶體塊。

緩衝區型別

對於每個原始型別,都有一個緩衝區型別,所有緩衝區都可以實現緩衝區介面。 大多數使用的緩衝區型別是ByteBuffer

在Java NIO中使用的核心緩衝區如下:

  • CharBuffer
  • DoubleBuffer
  • IntBuffer
  • LongBuffer
  • ByteBuffer
  • ShortBuffer
  • FloatBuffer

上述緩衝區覆蓋了我們可以通過I/O傳送的基本資料型別:charactersdoubleintlongbyteshortfloat

在NIO中,使用java.nio.Buffer類中實現的緩衝區進行資料傳輸。它與陣列相似,具有固定的容量大小。

分配緩衝區

為了獲得緩衝區物件,我們必須首先分配一個緩衝區。在每個Buffer類中,allocate()方法用於分配緩衝區。

下面來看看ByteBuffer分配容量為28位元組的例子:

ByteBuffer buf = ByteBuffer.allocate(28);

下面來看看另一個範例:CharBuffer分配空間大小為2048個字元。

CharBuffer buf = CharBuffer.allocate(2048);

從緩衝區讀取資料

從緩衝區讀取資料有兩種方法:

  • 通過使用get()方法之一讀取Buffer中的資料。
  • 將資料從緩衝區讀入通道。

下面來看看使用get()方法從Buffer讀取資料的例子:

byte aByte = buf.get();

下面來看看如何將Buffer中的資料讀入通道的例子:

int bytesWritten = inChannel.write(buf);

將資料寫入緩衝區

將資料寫入緩衝區有兩種方法:

  • 使用put()方法將資料寫入緩衝區。
  • 將資料從Channel寫入緩衝區。

基本緩衝區範例

下面來看看使用BufferedReadertestout.txt檔案中讀取行的簡單範例:

package com.yiibai;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class BufferedReaderDemo {
    public static void main(String[] args) {
        Path file = null;
        BufferedReader bufferedReader = null;
        String relativelyPath = System.getProperty("user.dir");
        try {
            file = Paths.get(relativelyPath + "/testout.txt");
            InputStream inputStream = Files.newInputStream(file);

            bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            System.out.println("Reading the Line of testout.txt file: \n" + bufferedReader.readLine());

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                bufferedReader.close();
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
        }
    }
}

執行上面範例程式碼,得到以下輸出結果:

Reading the Line of testout.txt file: 
易百教學定位為IT技術入門學習範例教學網站

上述程式讀取testout.txt檔案的第一行,然後在控制台上列印檔案的第一行。