一个关于NIO的小程序

随便看看:

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

 

 

字符集:

 

在打开相应的文件、将输入数据读入名为 inputDataByteBuffer 之后,我们的程序必须创建 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 );

在转换完成之后,我们就可以将数据写到文件中了。

你可能感兴趣的:(java)