Channel
Channel(通道)类似流,但又有些不同。
既可以从通道中读取数据,又可以写数据到通道。但流(InputStream和OutputStream)
的读写通常是单向的。
通道可以异步地读写。
通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。

Channel的实现
FileChannel
从文件中读写数据,FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。
RandomAccessFile read = new RandomAccessFile("a.txt", "r");
RandomAccessFile write = new RandomAccessFile("b.txt", "rw");
FileChannel readChannel = read.getChannel();
FileChannel writeChannel = write.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
while (readChannel.read(buffer) != -1) {
buffer.flip();
writeChannel.write(buffer);
buffer.compact();
}
readChannel.close();
writeChannel.close();
DatagramChannel
能通过UDP协议读写网络中的数据。
SocketChannel
能通过TCP读写网络中的数据。
ServerSocketChannel
可以监听新进来的TCP连接,对每一个新进来的连接都会创建一个SocketChannel。
Last updated