1.基本概念
站在用戶的角度思考問題,與客戶深入溝通,找到鳩江網(wǎng)站設(shè)計與鳩江網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名申請、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋鳩江地區(qū)。IO是主存和外部設(shè)備(硬盤、終端和網(wǎng)絡(luò)等)拷貝數(shù)據(jù)的過程。IO是操作系統(tǒng)的底層功能實現(xiàn),底層通過I/O指令進行完成。
所有語言運行時系統(tǒng)提供執(zhí)行I/O較高級別的工具。(c的printfscanf,java的面向?qū)ο蠓庋b)
2.Java標(biāo)準(zhǔn)io回顧
Java標(biāo)準(zhǔn)IO類庫是io面向?qū)ο蟮囊环N抽象?;诒镜胤椒ǖ牡讓訉崿F(xiàn),我們無須關(guān)注底層實現(xiàn)。InputStream\OutputStream(字節(jié)流):一次傳送一個字節(jié)。Reader\Writer(字符流):一次一個字符。
3.nio簡介
nio是javaNewIO的簡稱,在jdk1.4里提供的新api。Sun官方標(biāo)榜的特性如下:
–為所有的原始類型提供(Buffer)緩存支持。
–字符集編碼解碼解決方案。
–Channel:一個新的原始I/O抽象。
–支持鎖和內(nèi)存映射文件的文件訪問接口。
–提供多路(non-bloking)非阻塞式的高伸縮性網(wǎng)絡(luò)I/O。
本文將圍繞這幾個特性進行學(xué)習(xí)和介紹。
4.Buffer&Chanel
Channel和buffer是NIO是兩個最基本的數(shù)據(jù)類型抽象。
Buffer:
–是一塊連續(xù)的內(nèi)存塊。
–是NIO數(shù)據(jù)讀或?qū)懙闹修D(zhuǎn)地。
Channel:
–數(shù)據(jù)的源頭或者數(shù)據(jù)的目的地
–用于向buffer提供數(shù)據(jù)或者讀取buffer數(shù)據(jù),buffer對象的唯一接口。
–異步I/O支持
例子 1:CopyFile.java:
package sample; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class CopyFile { public static void main(String[] args) throws Exception { String infile = "C:\\copy.sql"; String outfile = "C:\\copy.txt"; // 獲取源文件和目標(biāo)文件的輸入輸出流 FileInputStream fin = new FileInputStream(infile); FileOutputStream fout = new FileOutputStream(outfile); // 獲取輸入輸出通道 FileChannel fcin = fin.getChannel(); FileChannel fcout = fout.getChannel(); // 創(chuàng)建緩沖區(qū) ByteBuffer buffer = ByteBuffer.allocate(1024); while (true) { // clear方法重設(shè)緩沖區(qū),使它可以接受讀入的數(shù)據(jù) buffer.clear(); // 從輸入通道中將數(shù)據(jù)讀到緩沖區(qū) int r = fcin.read(buffer); // read方法返回讀取的字節(jié)數(shù),可能為零,如果該通道已到達流的末尾,則返回-1 if (r == -1) { break; } // flip方法讓緩沖區(qū)可以將新讀入的數(shù)據(jù)寫入另一個通道 buffer.flip(); // 從輸出通道中將數(shù)據(jù)寫入緩沖區(qū) fcout.write(buffer); } } }