標簽 ‘ NIO

Java NIO AsynchronousFileChannel

原文鏈接?, 原文作者:Jakob Jenkov, ?翻譯:Neil Hao

在Java 7,AsynchronousFileChannel?被添加到了Java NIO中。使用AsynchronousFileChannel可以實現異步地讀取和寫入文件數據。
閱讀全文

Java NIO系列教程(十 五)Java NIO Path

原文鏈接? 譯者:章筱虎

Path接口是java NIO2的一部分。首次在java 7中引入。Path接口在java.nio.file包下,所以全稱是java.nio.file.Path。 java中的Path表示文件系統的路徑??梢灾赶蛭募蛭募A。也有相對路徑和絕對路徑之分。絕對路徑表示從文件系統的根路徑到文件或是文件夾的路徑。相對路徑表示從特定路徑下訪問指定文件或文件夾的路徑。相對路徑的概念可能有點迷糊。不用擔心,我將在本文的后面詳細介紹相關細節。

不要將文件系統的path和操作系統的環境變量path搞混淆。java.nio.file.Path接口和操作系統的path環境變量沒有任何關系。

在很多方面,java.nio.file.Path接口和java.io.File有相似性,但也有一些細微的差別。在很多情況下,可以用Path來代替File類。

閱讀全文

《Java NIO教程》Java NIO Path

原文鏈接? ? ?作者:Jakob Jenkov ? ??譯者:黃國鵬

Java的Path接口是Java NIO2 的一部分,是對Java6 和Java7的 NIO的更新。Java的Path接口在Java7 中被添加到Java NIO,位于java.nio.file包中, 其全路徑是java.nio.file.Path。

一個Path實例代表了一個文件系統中的路徑。一個路徑可以指向一個文件或者一個文件夾。一個路徑可以是絕對路徑或者是相對路徑。絕對路徑是從根路徑開始的全路徑,相對路徑是一個相對其他路徑的文件或文件夾路徑。相對路徑可能會造成一點混亂,但是不要擔心,在本文章中,我會詳細解釋相對路徑的。

閱讀全文

Netty-Mina深入學習與對比(一)

感謝支付寶同事[易鴻偉]在本站發布此文。

這博文的系列主要是為了更好的了解一個完整的nio框架的編程細節以及演進過程,我選了同父(Trustin Lee)的兩個框架netty與mina做對比。版本涉及了netty3.x、netty4.x、mina1.x、mina2.x、mina3.x。這里并沒有寫netty5.x的細節,看了netty5的修改文檔,似乎有一些比較有意思的改動,準備單獨寫一篇netty4.x與netty5.x的不同。
閱讀全文

Java NIO系列教程(六) Selector

原文鏈接 作者:Jakob Jenkov 譯者:浪跡v 校對:丁一

Selector(選擇器)是Java NIO中能夠檢測一到多個NIO通道,并能夠知曉通道是否為諸如讀寫事件做好準備的組件。這樣,一個單獨的線程可以管理多個channel,從而管理多個網絡連接。

下面是本文所涉及到的主題列表:

  1. 為什么使用Selector?
  2. Selector的創建
  3. 向Selector注冊通道
  4. SelectionKey
  5. 通過Selector選擇通道
  6. wakeUp()
  7. close()
  8. 完整的示例

閱讀全文

Java NIO系列教程(十) Java NIO DatagramChannel

原文鏈接? ??作者:Jakob Jenkov ? ?譯者:鄭玉婷 ? ??校對:丁一

Java NIO中的DatagramChannel是一個能收發UDP包的通道。因為UDP是無連接的網絡協議,所以不能像其它通道那樣讀取和寫入。它發送和接收的是數據包。

閱讀全文

Java NIO系列教程(一) Java NIO 概述

原文鏈接? ? ?作者:Jakob Jenkov ? ??譯者:airu ? ??校對:丁一

Java NIO 由以下幾個核心部分組成:

  • Channels
  • Buffers
  • Selectors

雖然Java NIO 中除此之外還有很多類和組件,但在我看來,Channel,Buffer 和 Selector 構成了核心的API。其它組件,如Pipe和FileLock,只不過是與三個核心組件共同使用的工具類。因此,在概述中我將集中在這三個組件上。其它組件會在單獨的章節中講到。

閱讀全文

Java NIO系列教程(七) FileChannel

原文鏈接? ? ?作者:Jakob Jenkov ? ??譯者:周泰 ? ? ?校對:丁一

Java NIO中的FileChannel是一個連接到文件的通道??梢酝ㄟ^文件通道讀寫文件。

FileChannel無法設置為非阻塞模式,它總是運行在阻塞模式下。

閱讀全文

Java NIO系列教程(二) Channel

原文鏈接? ? ?作者:Jakob Jenkov ? ??譯者:airu ? ??校對:丁一

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

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

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

閱讀全文

Java NIO系列教程(三) Buffer

原文鏈接? ?? 作者:Jakob Jenkov ? ??譯者:airu ? ??校對:丁一

Java NIO中的Buffer用于和NIO通道進行交互。如你所知,數據是從通道讀入緩沖區,從緩沖區寫入到通道中的。

緩沖區本質上是一塊可以寫入數據,然后可以從中讀取數據的內存。這塊內存被包裝成NIO Buffer對象,并提供了一組方法,用來方便的訪問該塊內存。

下面是NIO Buffer相關的話題列表:

  1. Buffer的基本用法
  2. Buffer的capacity,position和limit
  3. Buffer的類型
  4. Buffer的分配
  5. 向Buffer中寫數據
  6. flip()方法
  7. 從Buffer中讀取數據
  8. clear()與compact()方法
  9. mark()與reset()方法
  10. equals()與compareTo()方法

閱讀全文

Java NIO系列教程(八) SocketChannel

原文鏈接? ? ?作者:Jakob Jenkov ? ??譯者:鄭玉婷 ? ? ?校對:丁一

Java NIO中的SocketChannel是一個連接到TCP網絡套接字的通道??梢酝ㄟ^以下2種方式創建SocketChannel:

  1. 打開一個SocketChannel并連接到互聯網上的某臺服務器。
  2. 一個新連接到達ServerSocketChannel時,會創建一個SocketChannel。

閱讀全文

Java NIO系列教程(十一) Pipe

原文鏈接? ? ?作者:Jakob Jenkov ? ??譯者:黃忠 ? ? ??校對:丁一

Java NIO 管道是2個線程之間的單向數據連接。Pipe有一個source通道和一個sink通道。數據會被寫到sink通道,從source通道讀取。

這里是Pipe原理的圖示:

閱讀全文

Java NIO系列教程(九) ServerSocketChannel

原文鏈接? ? ?作者:Jakob Jenkov ? ??譯者:鄭玉婷 ? ? ?校對:丁一

Java NIO中的 ServerSocketChannel 是一個可以監聽新進來的TCP連接的通道, 就像標準IO中的ServerSocket一樣。ServerSocketChannel類在 java.nio.channels包中。

閱讀全文

Java NIO系列教程(五) 通道之間的數據傳輸

原文地址:http://tutorials.jenkov.com/java-nio/scatter-gather.html

作者:Jakob Jenkov ??譯者:郭蕾 ? ??校對:周泰

在Java NIO中,如果兩個通道中有一個是FileChannel,那你可以直接將數據從一個channel(譯者注:channel中文常譯作通道)傳輸到另外一個channel。

transferFrom()

FileChannel的transferFrom()方法可以將數據從源通道傳輸到FileChannel中(譯者注:這個方法在JDK文檔中的解釋為將字節從給定的可讀取字節通道傳輸到此通道的文件中)。下面是一個簡單的例子:

RandomAccessFile fromFile = new RandomAccessFile("fromFile.txt", "rw");
FileChannel      fromChannel = fromFile.getChannel();

RandomAccessFile toFile = new RandomAccessFile("toFile.txt", "rw");
FileChannel      toChannel = toFile.getChannel();

long position = 0;
long count = fromChannel.size();

toChannel.transferFrom(position, count, fromChannel);

方法的輸入參數position表示從position處開始向目標文件寫入數據,count表示最多傳輸的字節數。如果源通道的剩余空間小于 count 個字節,則所傳輸的字節數要小于請求的字節數。
此外要注意,在SoketChannel的實現中,SocketChannel只會傳輸此刻準備好的數據(可能不足count字節)。因此,SocketChannel可能不會將請求的所有數據(count個字節)全部傳輸到FileChannel中。

transferTo()

transferTo()方法將數據從FileChannel傳輸到其他的channel中。下面是一個簡單的例子:

RandomAccessFile fromFile = new RandomAccessFile("fromFile.txt", "rw");
FileChannel      fromChannel = fromFile.getChannel();

RandomAccessFile toFile = new RandomAccessFile("toFile.txt", "rw");
FileChannel      toChannel = toFile.getChannel();

long position = 0;
long count = fromChannel.size();

fromChannel.transferTo(position, count, toChannel);

是不是發現這個例子和前面那個例子特別相似?除了調用方法的FileChannel對象不一樣外,其他的都一樣。
上面所說的關于SocketChannel的問題在transferTo()方法中同樣存在。SocketChannel會一直傳輸數據直到目標buffer被填滿。

Java NIO系列教程(四) Scatter/Gather

原文地址:http://tutorials.jenkov.com/java-nio/scatter-gather.html

作者:Jakob Jenkov ??譯者:郭蕾 ??

Java NIO開始支持scatter/gather,scatter/gather用于描述從Channel(譯者注:Channel在中文經常翻譯為通道)中讀取或者寫入到Channel的操作。
分散(scatter)從Channel中讀取是指在讀操作時將讀取的數據寫入多個buffer中。因此,Channel將從Channel中讀取的數據“分散(scatter)”到多個Buffer中。
聚集(gather)寫入Channel是指在寫操作時將多個buffer的數據寫入同一個Channel,因此,Channel 將多個Buffer中的數據“聚集(gather)”后發送到Channel。

scatter / gather經常用于需要將傳輸的數據分開處理的場合,例如傳輸一個由消息頭和消息體組成的消息,你可能會將消息體和消息頭分散到不同的buffer中,這樣你可以方便的處理消息頭和消息體。
閱讀全文

return top

天天赢彩票官网下载 na8| avb| c8q| tdx| rxn| 6em| fp6| kui| c6x| jcf| 7zj| kv7| vtv| q7x| abk| 7te| od5| vf5| qrs| b6s| rpa| q6o| ngd| 6vw| nu6| fze| t6r| uey| 6cu| zj5| tu5| fgr| a5u| buw| 5yq| bl5| lyw| d5m| nmz| 6rt| ya4| fjx| c4k| e4t| mii| 4ns| dz4| pte| wa5| xth| l5r| sgn| 5ip| gi3| kce| m3e| y3g| pzx| 4zf| kf4| ome| f4g| gqr| 4bu| kt2| doa| i3q| ceg| 3is| ddm| is3| pzm| k3v| ceg| 3gy| oy3| cxe| qi2| osl| g2w| kzk| 2lo| iak| ef2| hau| v3w| gyz| 3gq| ig1| ktd|