Java NIO通道
时间:2020-01-09 10:36:15 来源:igfitidea点击:
Java NIO通道类似于流,但有一些区别:
- 我们可以读取和写入通道。流通常是单向的(读或者写)。
- 通道可以异步读写。
- 通道总是读取或者写入缓冲区。
如上所述,我们将数据从通道读取到缓冲区中,然后将数据从缓冲区写入通道中。
通道实现
以下是Java NIO中最重要的Channel实现:
- FileChannel
- DatagramChannel
- SocketChannel
- ServerSocketChannel
FileChannel从文件读取数据。
DatagramChannel可以通过UDP通过网络读取和写入数据。
SocketChannel可以通过TCP通过网络读取和写入数据。
ServerSocketChannel允许我们像网络服务器一样侦听传入的TCP连接。对于每个传入的连接,都会创建一个" SocketChannel"。
基本通道示例
这是一个使用" FileChannel"将一些数据读入" Buffer"的基本示例:
RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw"); FileChannel inChannel = aFile.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.print((char) buf.get()); } buf.clear(); bytesRead = inChannel.read(buf); } aFile.close();
注意" buf.flip()"调用。首先,我们读入缓冲区。然后,我们将其翻转。然后,我们读出来。