注意:轉載自並發程式設計網– ifeve.com本文連結位址: Java NIO系列教學(二) Channel
Java NIO的通道類似流,但又有些不同:
既可以從通道中讀取數據,又可以寫數據到通道。但流的讀寫通常是單向的。
通道可以非同步地讀寫。
通道中的資料總是要先讀到一個Buffer,或是總是要從一個Buffer中寫入。
如上所說,從通道讀取資料到緩衝區,從緩衝區寫入資料到通道。如下圖所示:
這些是Java NIO中最重要的通道的實作:
FileChannel
DatagramChannel
#SocketChannel
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(); } } }
以上是JAVA之Channel詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!