程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 調用Java NIO提高文件讀寫速度(1)

調用Java NIO提高文件讀寫速度(1)

編輯:關於JAVA

Java NIO的出現旨在提高文件的讀寫速度,當然IO用NIO重新實過,所以我們不用顯示的調用NIO也能享受這種高效的文件讀寫。

Java NIO的高效得益於其兩大"助手":Channel(管道)和Buffer(緩沖器)。當然這兩個"得力助手"的"年齡"遠遠比java大!力求簡單易懂的把知識講解給大家,我舉一個例子來說明一下這"兩元大將"是如何在Java NIO中配合工作的。

中國古代有一種傳統的吸煙器具---水煙袋。我想用這個東西來模擬一下Channel和Buffer的工作原理。不求說的好,力求准確無誤。

分析一下水煙袋是如何工作的:

第一步,准備工作,准備好上等煙絲;第二步,將"水斗"中裝入適量的水,煙倉中裝滿煙絲並插入水斗中,然後再將煙管插入水斗中;第三步,點燃煙絲並吸氣。香煙從煙倉產生,經過水的過濾進入水上的空閒區。第四步,享受吸煙的快感.....從這個例子中我們提取出主要對象"煙",來分析一下它的運動軌跡。煙倉把煙生產出來,經過水的過濾飄到水上面的空閒區域,然後通過煙管進入人的體內。

如果上面的過程大家理解了,明白了,那麼Java NIO你已經了解了50%,至少你已經知道它的工作原理了。因為用NIO處理的數據和用水煙袋中吸煙很相似。我們分析一下NIO的工作原理,非常簡單。

當然和吸煙一樣我們首先必須有要用NIO來處理需求的欲望(這好比你想要吸煙了),比方說我想要將C盤下面的wk.txt文件進行備份,備份文件的名稱為wk-bak.txt。類比剛剛吸煙的那個過程:

步驟一:准備工作,確定文件的位置,並將程序不可直接操作的文件轉換成字符流的形式(這一步和上邊吸煙實例的第一步沒有什麼差別,只是進行一些簡單的准備工作)。

  1. String inFile = "C:\\wk.txt";
  2. String outFile = "C:\\wk-bak.txt";
  3. FileInputStream inf = new FileInputStream(inFile);
  4. FileOutputStream outf = new FileOutputStream(outFile);
  5. ByteBuffer buffer = ByteBuffer.allocate(1024);

步驟二:創建文件輸入管道,和文件輸出管道。(這一步與上邊吸煙的第二部稍有差別,因為Channel和Buffer是在讀寫的時候才發生的"連接"動作)

  1. //准備文件讀取的管道-->相當於煙倉和煙管FileChannel inFc = inf.getChannel();
  2. FileChannel outFc = outf.getChannel();
  3. Charset charSet = Charset.forName("utf-8");
  4. //進行編碼解碼-->相當於水斗中水的過濾作用
  5. CharsetDecoder decoder = charSet.newDecoder();
  6. CharsetEncoder encoder = charSet.newEncoder();

步驟三:開始進行文件備份工作。

  1. while(true) {
  2. //准備向Buffer中寫入數據-->相當於點燃煙絲,完事具備只欠東風
  3. buffer.clear();
  4. //進行字符編碼 -->相當於水的過濾作用
  5. CharBuffer cb = decoder.decode(buffer);
  6. ByteBuffer bb = encoder.encode(cb);
  7. //數據經過編碼以後暫存緩沖區-->相當於經過水過濾後的煙暫停在水斗中
  8. int t = inFc.read(bb);
  9. if(t == -1) {
  10. break;
  11. }
  12. bb.flip();
  13. //將字節碼寫入目標文件-->相當於煙已經進入到嘴裡
  14. outFc.write(bb);
  15. }

步驟四:檢查文件是否備份成功。發現C盤下面多了一個wk-bak.txt的文件,內容與wk.txt一摸一樣。接下來享受Java帶給你的快感....

上面的例子估計大家已經理解的差不多了,當然如果深究也會有一些不太妥當的地方,但是不要較真,目的是學習NIO,並不是吸煙。如果感覺你可以了那麼就請把上面的例子補充完整,運行一下,享受一下NIO的威武(當然字符編碼並不是必須的,只是讓這個例子顯得完整一點)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved