Note: Reprinted from Concurrent Programming Network – ifeve.comLink address of this article: Java NIO Series Tutorial (2) Channel
The channel of Java NIO is similar Stream, but there are some differences:
can both read data from the channel and write data to the channel. But reading and writing streams are usually one-way.
Channels can be read and written asynchronously.
The data in the channel must first be read into a Buffer, or always written from a Buffer.
As mentioned above, data is read from the channel to the buffer and data is written from the buffer to the channel. As shown in the figure below:
1. Implementation of Channel
DatagramChannel can read and write data in the network through UDP.
SocketChannel can read and write data in the network through TCP.
ServerSocketChannel can monitor new incoming TCP connections, just like a web server. A SocketChannel is created for each new incoming connection.
2. Basic Channel Example
public class Channel1 {public static void main(String[] args) {try { RandomAccessFile raf = new RandomAccessFile("./.gitignore","rw"); FileChannel channel = raf.getChannel(); //获取通道ByteBuffer bf = ByteBuffer.allocate(50); //通过静态allocate方法创建一个缓冲区,容量为50byte[] bytes = new byte[]{}; bytes = "123".getBytes(); bf = ByteBuffer.wrap(bytes); //通过静态wrap方法,byte数组生成缓冲区,缓冲区中保留了原数据while(bf.hasRemaining()){ System.out.print((char) bf.get()); }int bytesRead ;while ((bytesRead = channel.read(bf)) != -1) { //将通道中的数据写入缓冲区,并判断通道中的数据是否到末尾System.out.println("Read " + bytesRead);bf.flip(); //反转缓冲区 实际上就是将position置为0 后续buffer详细介绍while(bf.hasRemaining()){ //判断缓冲区中是否还有值System.out.print((char) bf.get()); //输出缓冲区中的值 } bf.clear(); //清理缓冲区 } raf.close(); //关闭RandomAccessFile} catch (IOException e) { e.printStackTrace(); } } }
The above is the detailed content of Detailed explanation of Channel in JAVA. For more information, please follow other related articles on the PHP Chinese website!