随便看看:
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 );
在转换完成之后,我们就可以将数据写到文件中了。