java基礎開發教程,轉:Java NIO系列教程(二) Channel

 2023-10-18 阅读 29 评论 0

摘要:Java NIO的通道類似流,但又有些不同: 既可以從通道中讀取數據,又可以寫數據到通道。但流的讀寫通常是單向的。通道可以異步地讀寫。通道中的數據總是要先讀到一個Buffer,或者總是要從一個Buffer中寫入。正如上面所說,從通道讀取數據到緩沖

Java NIO的通道類似流,但又有些不同:

  • 既可以從通道中讀取數據,又可以寫數據到通道。但流的讀寫通常是單向的。
  • 通道可以異步地讀寫。
  • 通道中的數據總是要先讀到一個Buffer,或者總是要從一個Buffer中寫入。

正如上面所說,從通道讀取數據到緩沖區,從緩沖區寫入數據到通道。如下圖所示:

Channel的實現

這些是Java NIO中最重要的通道的實現:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

FileChannel 從文件中讀寫數據。

java基礎開發教程。DatagramChannel 能通過UDP讀寫網絡中的數據。

SocketChannel 能通過TCP讀寫網絡中的數據。

ServerSocketChannel可以監聽新進來的TCP連接,像Web服務器那樣。對每一個新進來的連接都會創建一個SocketChannel。

基本的 Channel 示例

下面是一個使用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() 的調用,首先讀取數據到Buffer,然后反轉Buffer,接著再從Buffer中讀取數據。

?

java nio教程,轉載于:https://www.cnblogs.com/yongdaimi/p/5999207.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/146860.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息