NoPerfectName Engineer

Java NIO入门

2017-07-24
NoPerfectName

参考:原文链接

核心对象

通道

到任何目的地(或来自任何地方)的所有数据都必须通过一个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 );

Similar Posts

Comments