NIO基础知识2
asCharBuffer()一次可以输出缓冲区中信息。使用方法为:
ByteBuffer buffer=ByteBuffer.allocate(1024); System.out.println(buffer.asCharBuffer());
//这个地方注意:普通缓冲器容纳的是普通字节,假如把它们转换成字符,要在输入他们的时候进行编码,代码如下:
public class BufferToText {private static final int BSIZE=1024;public static void main(String[] args) throws Exception{FileChannel fc=new FileOutputStream("D:\\data2.txt").getChannel();fc.write(ByteBuffer.wrap("some txtx".getBytes()));fc.close();fc=new FileInputStream("D:\\data2.txt").getChannel();ByteBuffer buffer=ByteBuffer.allocate(BSIZE);fc.read(buffer);buffer.flip();//while(buffer.hasRemaining())//System.out.print((char)buffer.get());//注意:这个地方按照上面输出不会出现乱码,但直接转换成字符会出现乱码System.out.println(buffer.asCharBuffer());buffer.rewind();//为了返回到数据开始的部分String encoding=System.getProperty("file.encoding");System.out.println("decode using "+encoding+":"+Charset.forName(encoding).decode(buffer));fc=new FileOutputStream("D:\\data2.txt").getChannel();fc.write(ByteBuffer.wrap("Some text2".getBytes("UTF-16BE")));fc.close();fc=new FileInputStream("D:\\data2.txt").getChannel();buffer.clear();fc.read(buffer);buffer.flip(); //在数据读入到缓冲区之前对他进行编码,这样不会出现乱码System.out.println(buffer.asCharBuffer());}}