直接上代码:
package com.xx.nio;
import java.io.File;
import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
public class ChannelTest {
public static void main(String[] args) throws Exception {
String path = ChannelTest.class.getResource("/").getPath();
FileInputStream fis = new FileInputStream(new File(path + "nio-test.txt"));
FileChannel channel = fis.getChannel();
/*
* Java.nio.charset.Charset处理了字符转换问题。
* 它通过构造CharsetEncoder和CharsetDecoder将字符序列转换成字节和逆转换。
*/
Charset charset = Charset.forName("UTF-8");
CharsetDecoder decoder = charset.newDecoder();
ByteBuffer buffer = ByteBuffer.allocate(128);
CharBuffer charBuffer = CharBuffer.allocate(128);
int i = channel.read(buffer);
while(i != -1){
buffer.flip(); // 切换到读模式
decoder.decode(buffer, charBuffer, false);
charBuffer.flip(); // 切换到读模式
while(charBuffer.hasRemaining()){
char c = charBuffer.get();
System.out.print(c);
}
charBuffer.clear();
buffer.clear();
i = channel.read(buffer);
}
channel.close();
fis.close();
}
}