Channel

Channel(通道)类似流,但又有些不同。

  1. 既可以从通道中读取数据,又可以写数据到通道。但流(InputStream和OutputStream)

    的读写通常是单向的。

  2. 通道可以异步地读写。

  3. 通道中的数据总是要先读到一个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