asCharBuffer()一次可以输出缓冲区中信息。使用方法为:
//[b]这个地方注意:[/b]普通缓冲器容纳的是普通字节,假如把它们转换成字符,要在输入他们的时候进行编码,代码如下:
ByteBuffer buffer=ByteBuffer.allocate(1024);
System.out.println(buffer.asCharBuffer());//[b]这个地方注意:[/b]普通缓冲器容纳的是普通字节,假如把它们转换成字符,要在输入他们的时候进行编码,代码如下:
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());
}
}
221

被折叠的 条评论
为什么被折叠?



