参考:原文链接
核心对象
通道
到任何目的地(或来自任何地方)的所有数据都必须通过一个Channel对象,类似于I/O中的流,但通道是双向的,而流是单向的。
缓冲区
发送给一个通道的所有对象都必须首先放在缓冲区中,从通道中读取的任何数据也都要读到缓冲区中。其中,唯一与通道交互的缓冲器是ByteBuffer。
</br></br>
NIO的读和写
从一个通道中读取很简单:只需创建一个缓冲区,然后让通道将数据读到这个缓冲区中。写入也相当简单:创建一个缓冲区,用数据填充它,然后让通道用这些数据来执行写入操作。
从文件中读取
因此读取文件涉及三个步骤
(1) 从 FileInputStream 获取 Channel;
FileInputStream fin = new FileInputStream( "readandshow.txt" );
FileChannel fc = fin.getChannel();
(2) 创建 Buffer;
ByteBuffer buffer = ByteBuffer.allocate( 1024 );
(3) 将数据从 Channel 读到 Buffer 中。
fc.read( buffer );
写入文件
(1)从 FileOutputStream 获取一个通道
FileOutputStream fout = new FileOutputStream( "writesomebytes.txt" );
FileChannel fc = fout.getChannel();
(2)创建一个缓冲区并在其中放入一些数据
ByteBuffer buffer = ByteBuffer.allocate( 1024 );
for (int i=0; i<message.length; ++i) {
buffer.put( message[i] );
}
buffer.flip(); //做好被别人读取字节的准备
(3)写入缓冲区中
fc.write( buffer );