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());
		
		
		
		
	}
}

你可能感兴趣的:(ByteBuffer,asCharBuffer)