缓冲区(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
文件的第一行,然后在控制台上打印文件的第一行。