随便看看:
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class BufferTest { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { //原始文件 FileInputStream fin = new FileInputStream("test.txt"); FileChannel fc = fin.getChannel(); //新建缓存并将原始文件的内容写入缓存 ByteBuffer bbf = ByteBuffer.allocate(1024); fc.read(bbf); //拷贝到此文件 FileOutputStream fout = new FileOutputStream("result.txt"); FileChannel fc1 = fout.getChannel(); //将之前的缓存中的信息写入到新文件的channel里 bbf.flip();//必不可少,否则新文件里面的内容为空 fc1.write(bbf); } }
从缓冲区buffer里取出得到一个缓冲区分片slice:
buffer.position( 3 ); buffer.limit( 7 ); ByteBuffer slice = buffer.slice();
字符集:
在打开相应的文件、将输入数据读入名为 inputData
的 ByteBuffer
之后,我们的程序必须创建 ISO-8859-1 (Latin1) 字符集的一个实例:
Charset latin1 = Charset.forName( "ISO-8859-1" );
然后,创建一个解码器(用于读取)和一个编码器 (用于写入):
CharsetDecoder decoder = latin1.newDecoder();
CharsetEncoder encoder = latin1.newEncoder();
为了将字节数据解码为一组字符,我们把 ByteBuffer
传递给 CharsetDecoder
,结果得到一个 CharBuffer
:
CharBuffer cb = decoder.decode( inputData );
如果想要处理字符,我们可以在程序的此处进行。但是我们只想无改变地将它写回,所以没有什么要做的。
要写回数据,我们必须使用 CharsetEncoder
将它转换回字节:
ByteBuffer outputData = encoder.encode( cb );
在转换完成之后,我们就可以将数据写到文件中了。