JavaNIO之缓冲区基础

时间:2022-09-05 14:50:39

该博客是《Java NIO》学习笔记中的缓冲区基础这一章节,由于内容很多,只记录代码和测试结果,不明白的地方请参见《Java NIO》一书,书中有详细的解释。

例子:填充和释放缓冲区

package chapter2;

import java.nio.CharBuffer;

/**
* 缓冲区填充和释放的例子
*/
public class BufferFillDrain {

private static int index = 0;
private static String[] strings = {
"A random string value",
"The product of an infinite number of monkeys",
"Hey hey we're the Monkees",
"Opening act for the Monkees: Jimi Hendrix",
"'Scuse me while I kiss this fly",
"Help Me! Help Me!"
};

public static void main(String[] args) {
CharBuffer buffer = CharBuffer.allocate(100);

while(fillBuffer(buffer)) {
//填充完毕,将缓冲区由写改为读的状态
buffer.flip();
drainBuffer(buffer);
buffer.clear();//填充之前清空缓冲区
}
}

/**
* 从缓冲区抽取字符串
* @param buffer
*/
public static void drainBuffer(final CharBuffer buffer) {
while(buffer.hasRemaining()) {
System.out.print(buffer.get());
}
System.out.println("");
}

/**
* 填充字符缓冲区
* @param buffer 等待被填充的缓冲区
* @return
*/
private static boolean fillBuffer(final CharBuffer buffer) {

if(index >= strings.length) {
return false;
}

String string = strings[index++];

for(int i = 0; i < string.length(); i ++) {
buffer.put(string.charAt(i));
}

return true;
}
}

运行上述代码,可得到下面的结果:

A random string value
The product of an infinite number of monkeys
Hey hey we're the Monkees
Opening act for the Monkees: Jimi Hendrix
'Scuse me while I kiss this fly
Help Me! Help Me!