在Java 7,AsynchronousFileChannel 被添加到了Java NIO中。使用AsynchronousFileChannel可以實現異步地讀取和寫入文件數據。
網站建設哪家好,找成都創(chuàng)新互聯!專注于網頁設計、網站建設、微信開發(fā)、成都小程序開發(fā)、集團企業(yè)網站建設等服務項目。為回饋新老客戶創(chuàng)新互聯還提供了城東免費建站歡迎大家使用!創(chuàng)建一個AsynchronousFileChannel
我們可以使用AsynchronousFileChannel提供的靜態(tài)方法 open() 創(chuàng)建它。示例代碼如下:
Path path = Paths.get("data/test.xml");
AsynchronousFileChannel fileChannel =
AsynchronousFileChannel.open(path, StandardOpenOption.READ);
第一個參數是一個 PATH 的對像實例,它指向了那個與 AsynchronousFileChannel 相關聯的文件。
第二個參數是一個或多個操作選項,它決定了 AsynchronousFileChannel 將對目標文件做何種操作。示例代碼中我們使用了 StandardOpenOption.READ ,它表明我們將要對目標文件進行讀操作。
讀取數據
AsynchronousFileChannel 提供了兩種讀取數據的方式,都是調用它本身的 read() 方法。下面將對兩種方式進行介紹。
使用Futrue讀取數據
第一種反式是調用 AsynchronousFileChannel 的 read() 方法,該方法反回一個 Future 類型的對象。
Future operation = fileChannelread(buffer, 0);
第一個參數是ByteBuffer,從 AsynchronousFileChannel 中讀取的數據先寫入這個 ByteBuffer 。
第二個參數表示從文件讀取數據的開始位置。
此 read() 方法會立即返回,即使整個讀的過程還沒有完全結束。我們可以通過operation.isDone()來檢查讀取是否完成。這里的 operation 是上面調用 read() 方法返回的 Future 類型的實例。下面是一段詳細的代碼示例:
AsynchronousFileChannel fileChannel = AsynchronousFileChannel.open(path, StandardOpenOption.READ); ByteBuffer buffer = ByteBuffer.allocate(1024); long position = 0; Futureoperation = fileChannel.read(buffer, position); while(!operation.isDone()); buffer.flip(); byte[] data = new byte[buffer.limit()]; buffer.get(data); System.out.println(new String(data)); buffer.clear();