Java NIO緩衝區
緩衝區(Buffers
)在java.nio
包中定義。 它定義了所有緩衝區通用的核心功能:限制,容量和當前位置。
Java NIO緩衝區用於與NIO通道進行交互。這是寫入數據的內存塊,以便在稍後再次進行讀取。 內存塊用NIO緩衝對象包裝,這樣可以提供更簡單的方法來處理內存塊。
緩衝區類型
對於每個原始類型,都有一個緩衝區類型,所有緩衝區都可以實現緩衝區接口。 大多數使用的緩衝區類型是ByteBuffer
。
在Java NIO中使用的核心緩衝區如下:
-
CharBuffer
-
DoubleBuffer
-
IntBuffer
-
LongBuffer
-
ByteBuffer
-
ShortBuffer
-
FloatBuffer
上述緩衝區覆蓋了我們可以通過I/O發送的基本數據類型:characters
,double
,int
,long
,byte
,short
和float
。
在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
寫入緩衝區。
基本緩衝區示例
下面來看看使用BufferedReader
從testout.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
文件的第一行,然後在控制檯上打印文件的第一行。