二 Channel
Java NIO的通道类似流,但又有些不同
- 既可以从通道中读取数据,也可以写数据到通道。但是流的读写通常是单向的
- 通道可以异步读写
- 通道中的数据通常总是要先读到一个Buffer,或者总是从Buffer中写入
Channel实现类
- FileChannel:从文件中读取数据
- DatagramChannel:能通过UDP读写网络中的数据
- SockeChannel:能通过TCP读写网络中的数据
- ServerSocketChannel:可以监听新进来的TCP连接,像WEB服务器那样。对每一个新进来的连接都会创建一个SocketChannel。
基本的Channel示例
import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class FileChannelDemo{ public static void main(String[] args) throws Exception { RandomAccessFile rFile = new RandomAccessFile("D:\\data.txt","rw"); FileChannel inChannel = rFile.getChannel(); ByteBuffer buf = ByteBuffer.allocate(48); int bytesRead = inChannel.read(buf); while(bytesRead != -1){ System.out.println("Read "+bytesRead); buf.flip(); while(buf.hasRemaining()){ System.out.println((char)buf.get()); } buf.clear(); bytesRead = inChannel.read(buf); } rFile.close(); } }
注意 buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取。
转载自并发编程网 – ifeve.com本文链接地址: Java NIO系列教程(二) Channel