Java語言程序設計(第2版)教學設計第09章 教學設計_第1頁
Java語言程序設計(第2版)教學設計第09章 教學設計_第2頁
Java語言程序設計(第2版)教學設計第09章 教學設計_第3頁
Java語言程序設計(第2版)教學設計第09章 教學設計_第4頁
Java語言程序設計(第2版)教學設計第09章 教學設計_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

學IT有疑問,就找千問千知千里尋他眾百度,鋒自苦寒磨礪出千鋒教育Java語言程序設計(第2版)教學設計課程名稱:Java語言程序設計(第2版)_______授課年級:___________________________授課學期:___________________________教師姓名:___________________________2020年03月01日課程名稱第9章I/O(輸入/輸出)流計劃學時4學時內(nèi)容分析本章主要介紹流概述、字節(jié)流、字符流、其他I/O流、File類、RandomAccessFile、字符編碼、NIO教學目標與教學要求要求學生熟練掌握操作字節(jié)流和字符流讀寫文件、了解其他I/O流、熟練掌握File類及其用法、了解NI/O的概念及其用法、了解常見字符編碼教學重點字節(jié)流、字符流、其他I/O流、File類、RandomAccessFile、字符編碼、NIO教學難點字節(jié)流、字符流、其他I/O流、File類、RandomAccessFile、字符編碼、NIO教學方式課堂講解及ppt演示教學過程第一課時(流概述、字節(jié)流、字符流、其他I/O流)內(nèi)容回顧回顧上節(jié)內(nèi)容,引出本課時主題。上節(jié)已經(jīng)介紹了集合類,程序的主要任務是操作數(shù)據(jù)。在程序運行時,這些數(shù)據(jù)都必須位于內(nèi)存中,并且屬于特定的類型,程序才能操作它們。JavaI/O系統(tǒng)負責處理程序的輸入和輸出,I/O類庫位于java.io包中,它對各種常見的輸入流和輸出流進行了抽象。本章將對I/O流進行詳細講解。明確學習目標能夠掌握流概述能夠掌握字節(jié)流的概念能夠掌握字節(jié)流讀寫文件能夠掌握文件的復制能夠掌握字節(jié)流的緩沖區(qū)能夠掌握裝飾設計模式能夠掌握字節(jié)緩沖流能夠掌握字符流定義及基本用法能夠掌握字符流操作文件能夠掌握字符流的緩沖區(qū)能夠掌握LineNumberReader能夠掌握轉(zhuǎn)換流能夠掌握ObjectInputStream和ObjectOutputStream能夠掌握DataInputStream和DataOutputStream能夠掌握PrintStream能夠掌握標準輸入輸出流能夠掌握PipedInputStream和PipedOutputStream知識講解流概述流就是字節(jié)序列的抽象概念,能被連續(xù)讀取數(shù)據(jù)的數(shù)據(jù)源和能被連續(xù)寫入數(shù)據(jù)的接收端就是流,流機制是Java及C++中的一個重要機制,通過流開發(fā)人員可以自由控制文件、內(nèi)存、I/O設備等數(shù)據(jù)的流向。而I/O流就是用于處理設備上的數(shù)據(jù),如硬盤、內(nèi)存、鍵盤錄入等,就好像管道,將兩個容器連接起來,如圖所示。字節(jié)流的概念在計算機中,所有的文件都能以二進制(字節(jié))形式存在,Java的I/O中針對字節(jié)傳輸操作提供了一系列流,統(tǒng)稱為字節(jié)流。字節(jié)流有兩個抽象基類InputStream和OutputStream,分別處理字節(jié)流的輸入和輸出,所有的字節(jié)輸入流都繼承自InputStream類,所有的字節(jié)輸出流都繼承自OutputStream類。在這里,輸入和輸出的概念要有一個參照物,是站在程序的角度來理解這兩個概念,如圖所示。在圖中,從程序到文件是輸出流(OutputStream),將數(shù)據(jù)從程序輸出到文件。從文件到程序是輸入流(InputStream),通過程序讀取文件中的數(shù)據(jù)。這樣就實現(xiàn)了數(shù)據(jù)的傳輸。字節(jié)流讀寫文件9.2.1節(jié)介紹了InputStream和OutputStream的眾多子類,其中,F(xiàn)ileInputStream和FileOutputStream是兩個很常用的子類,F(xiàn)ileInputStream用來從文件中讀取數(shù)據(jù),操作文件的字節(jié)輸入流,接下來通過一個案例來演示如何從文件中讀取數(shù)據(jù)。首先在D盤根目錄下新建一個文本文件read.txt,文件內(nèi)容如下。文件的復制在9.2.2節(jié)中詳細講解了文件輸入流和文件輸出流,實際開發(fā)中,往往都是二者結(jié)合使用,比如文件的復制。接下來通過一個案例來演示如何通過輸入輸出流實現(xiàn)文件的復制,首先在當前目錄新建文件夾src和tar,將一張圖片test.jpg存入src中,然后開始編寫代碼,如例所示。字節(jié)流的緩沖區(qū)在9.2.3節(jié)中講解了如何復制文件,但復制的方式是一個字節(jié)一個字節(jié)地復制,頻繁操作文件,效率非常低,利用字節(jié)流的緩沖區(qū)可以解決這一問題,提高效率。緩沖區(qū)可以存放一些數(shù)據(jù),例如,某出版社要從北京往西安運送教材,如果有一千本教材,每次只運送一本教材,就需要運輸一千次,為了減少運輸次數(shù),可以先把一批教材裝在車廂中,這樣就可以成批地運送教材,這時的車廂就相當于一個臨時緩沖區(qū)。當通過流的方式復制文件時,為了提高效率也可以定義一個字節(jié)數(shù)組作為緩沖區(qū),將多個字節(jié)讀到緩沖區(qū),然后一次性輸出到文件,這樣會大大提高效率。接下來通過一個案例來演示如何在復制文件時應用緩沖區(qū)提高效率。如例所示。裝飾設計模式裝飾模式是在不必改變原類文件和使用繼承的情況下,動態(tài)地擴展一個對象的功能。它是通過創(chuàng)建一個包裝對象,也就是裝飾來包裹真實的對象。例如,在北京買了一套房,冬天天氣很冷,想在房子的客廳安裝一臺空調(diào),這就相當于為這套新房填加了新的功能。裝飾對象和被裝飾對象要實現(xiàn)同一個接口,裝飾對象持有被裝飾對象的實例,如圖所示。字節(jié)流緩沖流9.2.6節(jié)講解了裝飾設計模式,實際上,在I/O中一些流也用到了這種模式,分別是BufferedInputStream類和BufferedOutputStream類,這兩個流都使用了裝飾設計模式。它們構(gòu)造方法中分別接收InputStream和OutputStream類型的參數(shù)作為被裝飾對象,在執(zhí)行讀寫操作時提供緩沖功能,如圖所示。字符流定義及基本用法前面講解了字節(jié)流的相關內(nèi)容,Java還提供了字符流,用于操作字符。與字節(jié)流相似,字符流也有兩個抽象基類,分別是Reader和Writer,Reader是字符輸入流,用于從目標文件讀取字符,Writer是字符輸出流,用于向目標文件寫入字符。字符流也是由兩個抽象基類衍生出很多子類,由子類來實現(xiàn)功能,先來了解一下它們的結(jié)構(gòu),如圖所示。字符流操作文件9.3.1節(jié)介紹了Reader和Writer的眾多子類,其中,F(xiàn)ileReader和FileWriter是兩個很常用的子類,F(xiàn)ileReader類是用來從文件中讀取字符的,操作文件的字符輸入流,接下來通過一個案例來演示如何從文件中讀取字符。首先在當D盤根目錄下新建一個文本文件read.txt,文件內(nèi)容如下。字符流的緩沖區(qū)前面講解了字節(jié)流的緩沖區(qū),字符流也同樣有緩沖區(qū)。字符流中帶緩沖區(qū)的流分別是BufferedReader類和BufferedWriter類,其中,BufferedReader類用于對字符輸入流進行包裝,BufferedWriter類用于對字符輸出流進行包裝,包裝后會提高字符流的讀寫效率。接下來通過一個案例演示如何在復制文件時應用字符流緩沖區(qū),先在項目的根目錄下創(chuàng)建一個src.txt文件,文件內(nèi)容如下。LineNumberReaderJava程序在編譯或運行期間經(jīng)常會出現(xiàn)一些錯誤,在錯誤中通常會報告出錯的行號,為了方便查找錯誤,需要在代碼中加入行號。JDK提供了一個可以跟蹤行號的流——LineNumberReader,它是BufferedReader的子類。接下來通過一個案例來演示復制文件時,如何為文件內(nèi)容加上行號,首先在當前目錄新建一個文件code1.txt,文件內(nèi)容如下。轉(zhuǎn)換流前面分別講解了字節(jié)流和字符流,有時字節(jié)流和字符流之間也需要進行轉(zhuǎn)換,在JDK中提供了可以將字節(jié)流轉(zhuǎn)換為字符流的兩個類,分別是InputStreamReader類和OutputStreamWriter類,它們被稱為轉(zhuǎn)換流,其中,OutputStreamWriter類可以將一個字符輸出流轉(zhuǎn)換成字節(jié)輸出流,而InputStreamReader類可以將一個字節(jié)輸入流轉(zhuǎn)換成字符輸入流,轉(zhuǎn)換流的出現(xiàn)方便了對文件的讀寫,它在字符流與字節(jié)流之間架起了一座橋梁,使原本沒有關聯(lián)的兩種流操作能夠進行轉(zhuǎn)化,提高了程序的靈活性。ObjectInputStream和ObjectOutputStream前面講解了如何通過流讀取文件,實際上通過流也可以讀取對象,例如,將內(nèi)存中的對象轉(zhuǎn)換為二進制數(shù)據(jù)流的形式輸出,保存到硬盤,這叫作對象的序列化。通過將對象序列化,可以方便地實現(xiàn)對象的傳輸和保存。在Java中,并不是所有的類的對象都可以被序列化,如果一個類對象需要被序列化,則此類必須實現(xiàn)java.io.Serializable接口,這個接口內(nèi)沒有定義任何方法,是一個標識接口,表示一種能力。Java提供了兩個類用于序列化對象的操作,它們分別是ObjectInputStream類和ObjectOutputStream類。對象序列化和反序列化通過以下兩步實現(xiàn)。(1)創(chuàng)建OutputStream對象,封裝在ObjectOutputStream對象中,只需調(diào)用writeObject即可將對象序列化。(2)創(chuàng)建InputStream對象,封裝在ObjectInputStream對象中,只需調(diào)用readObject即可將對象反序列化。DataInputStream和DataOutputStream上一節(jié)講解了將對象序列化和反序列化,Java中還提供了將對象中的一部分數(shù)據(jù)進行序列化和反序列化的類,也就是將基本數(shù)據(jù)類型序列化和反序列化,它們分別是DataInputStream類和DataOutputStream類。DataInputStream類和DataOutputStream類是兩個與平臺無關的數(shù)據(jù)操作流,它們不僅提供了讀寫各種基本數(shù)據(jù)類型數(shù)據(jù)的方法,而且還提供了readUTF()方法和writeUTF()方法,用于輸入輸出時指定字符串的編碼類型為UTF-8,接下來通過一個案例演示這兩個類如何讀寫數(shù)據(jù)。如例所示。PrintStream前面講解了使用輸出流輸出字節(jié)數(shù)組,如果想直接輸出數(shù)組、日期、字符等呢?Java中提供了PrintStream流來解決這一問題,它應用了裝飾設計模式,使輸出流的功能更完善,它提供了一系列用于打印數(shù)據(jù)的print()和println()方法,被稱作打印流。接下來通過一個案例演示PrintStream流的用法,如例所示。標準輸入輸出流Java中有3個特殊的流對象常量,如表所示。表中列舉了3個特殊的常量,它們被習慣性地稱為標準輸入輸出流。其中,err是將數(shù)據(jù)輸出到控制臺,通常是程序運行的錯誤信息,是不希望用戶看到的;out是標準輸出流,默認將數(shù)據(jù)輸出到命令行窗口,是希望用戶看到的;in是標準輸入流,默認讀取鍵盤輸入的數(shù)據(jù)。接下來通過一個案例演示這3個常量的使用。如例所示。PipedArrayInputStream和ByteArrayOutputStream在UNIX/LINUX中有一個很有用的概念——管道(pipe),它具有將一個程序的輸出當作另一個程序的輸入的能力。在Java中也提供了類似這個概念的管道流,可以使用管道流進行線程之間的通信,在這個機制中,輸入流和輸出流必須相連接,這樣的通信有別于一般的共享數(shù)據(jù),它不需要一個共享的數(shù)據(jù)空間。管道流主要用于連接兩個線程間的通信。管道流也分為字節(jié)流(PipedInputStream、PipedOutputStream)和字符流(PipedReader、PipedWriter),本節(jié)只講解PipedInputStream類和PipedOutputStream類。接下來通過一個案例演示管道流的使用,示例代碼參考教材9.4.5節(jié)。第二課時(其他I/O流、File類、RandomAccessFile、字符編碼、NIO)內(nèi)容回顧回顧上節(jié)內(nèi)容,引出本課時主題。上節(jié)已經(jīng)介紹了流概述、字節(jié)流的概念、字節(jié)流讀寫文件、文件的復制、字節(jié)流的緩沖區(qū)、裝飾設計模式、字節(jié)緩沖流、字符流定義及基本用法、字符流操作文件、字符流的緩沖區(qū)、LineNumberReader、轉(zhuǎn)換流、ObjectInputStream和ObjectOutputStream、DataInputStream和DataOutputStream、PrintStream、標準輸入輸出流和PipedInputStream和PipedOutputStream,下面將介紹ByteArrayInputStream和ByteArrayOutputStream、CharArrayReader和CharArrayWriter、SequenceInputStream、File類的常用方法、遍歷目錄下的文件、文件過濾、刪除文件及目錄、RandomAccessFile、常用字符集、字符編碼和解碼、字符傳輸、NIO概述、NIO基礎、NIO中的讀和寫操作和注意事項。明確學習目標能夠掌握ByteArrayInputStream和ByteArrayOutputStream能夠掌握CharArrayReader和CharArrayWriter能夠掌握SequenceInputStream能夠掌握File類的常用方法能夠掌握遍歷目錄下的文件能夠掌握文件過濾能夠掌握刪除文件及目錄能夠掌握RandomAccessFile能夠掌握常用字符集能夠掌握字符編碼和解碼能夠掌握字符傳輸能夠掌握NIO概述能夠掌握NIO基礎能夠掌握NIO中的讀和寫操作能夠掌握注意事項知識講解ByteArrayInputStream和ByteArrayOutputStream前面學習的輸入和輸出流都是程序與文件之間的操作,有時程序在運行過程中要生成一些臨時文件,可以采用虛擬文件的方式實現(xiàn)。Java提供了內(nèi)存流機制,可以實現(xiàn)將數(shù)據(jù)儲存到內(nèi)存中,稱為內(nèi)存操作流,它們分別是字節(jié)內(nèi)存操作流(ByteArrayInputStream、ByteArrayOutputStream)和字符內(nèi)存操作流(CharArrayWriter、CharArrayReader),本節(jié)只講解字節(jié)內(nèi)存操作流。接下來通過一個案例演示字節(jié)內(nèi)存操作流的使用,示例代碼參考教材9.4.6節(jié)。CharArrayReader和CharArrayWriter9.4.6節(jié)講解了字節(jié)內(nèi)存操作流,與之對應的還有字符內(nèi)存操作流,分別是CharArrayReader類和CharArrayWriter類。CharArrayWriter類可以將字符類型數(shù)據(jù)臨時存入內(nèi)存緩沖區(qū)中,CharArrayReader類可以從內(nèi)存緩沖區(qū)中讀取字符類型數(shù)據(jù),接下來通過一個案例演示這兩個類的使用,如例所示。SequenceInputStream前面講解的對文件進行操作都是通過一個流,Java提供了SequenceInputStream類可以將多個輸入流按順序連接起來,合并為一個輸入流。當通過這個類來讀取數(shù)據(jù)時,它會依次從所有被串聯(lián)的輸入流中讀取數(shù)據(jù),對程序來說就好像對同一個流操作。接下來通過一個案例演示SequenceInputStream類的使用,首先在當前目錄創(chuàng)建file1.txt文件和file2.txt文件,其中file1.txt文件內(nèi)容如下。file2.txt文件內(nèi)容如下。File類的常用方法使用File類進行操作,首先要設置一個操作文件的路徑,F(xiàn)ile類有3個構(gòu)造方法可以用來生成File對象并且設置操作文件的路徑,如下所示。如上所示構(gòu)造方法中,“directoryPath”表示文件的路徑名,“filename”是文件名,“dirObj”是一個指定目錄的File對象。通過這3個構(gòu)造方法可以創(chuàng)建File對象,如下所示。如上所示創(chuàng)建3個File對象f1、f2和f3,在指定路徑時,使用了“/”,Java能正確處理UNIX和Windows約定路徑分隔符,所以在Windows下用“/”是可以正確指定路徑的,如果在Windows下使用反斜杠“\”作為路徑分隔符,則需要轉(zhuǎn)義,寫兩個反斜杠“\\”。在File中提供了一系列用于操作文件的有關方法,接下來先了解一下File類的常用方法,表參考教材9.5.1節(jié)。表列舉了File類的常用方法,接下來通過一個案例演示這些方法的基本使用,先在當前目錄創(chuàng)建一個空的file.txt文件,然后編寫代碼,示例代碼參考教材9.5.1節(jié)。遍歷目錄下的文件在文件操作中,遍歷某個目錄下的文件是很常見的操作,F(xiàn)ile類中提供的list()方法就是用來遍歷目錄下所有文件的。接下來通過一個案例演示list()方法的使用,如例所示。文件過濾9.5.2節(jié)中講解了如何遍歷目錄下的文件,調(diào)用File類的list()方法成功遍歷了目錄下的文件,但有時候可能只需要遍歷某些文件,比如遍歷目錄下擴展名為“.java”的文件,這就需要用到File類的list(FilenameFilterfilter)方法。接下來通過一個案例演示如何遍歷目錄下擴展名為“.java”的文件,如例所示。刪除文件及目錄前面講解了文件的遍歷和過濾,文件的刪除操作也是很常見的,接下來通過一個案例演示如何刪除文件及目錄,如例所示。RandomAccessFile除了File類之外,Java還提供了RandomAccessFile類用于專門處理文件,它支持“隨機訪問”的方式,這里“隨機”是指可以跳轉(zhuǎn)到文件的任意位置處讀寫數(shù)據(jù)。使用RandomAccessFile類,程序可以直接跳到文件的任意地方讀、寫文件,既支持只訪問文件的部分內(nèi)容,又支持向已存在的文件追加內(nèi)容。RandomAccessFile類在數(shù)據(jù)等長記錄格式文件的隨機(相對順序而言)讀取時有很大的優(yōu)勢,但該類僅限于操作文件,不能訪問其他的I/O設備,如網(wǎng)絡、內(nèi)存影響等,接下來了解一下RandomAccessFile類的構(gòu)造方法,具體示例如下。常用字符集大家在看諜戰(zhàn)片時,經(jīng)常會看到情報員將其得到的軍事計劃和命令等情報用密碼本將文字翻譯成秘密代碼發(fā)出,敵人就算接收到該代碼也要花很長時間進行破譯,而隊友就可以使用同樣的密碼本將收到的代碼翻譯成文字,計算機之間進行傳輸同樣需要使用一種“密碼本”,它叫做字符碼表。計算機只能識別二進制數(shù)據(jù),為了讓它識別各個國家的文字,就將各個國家的文字用數(shù)字來表示,并一一對應,形成一張表,這就是編碼表,編碼表是一種可以讓計算機識別的特定字符集,針對不同文字,每個國家都指定了自己的碼表,接下來介紹幾種常見的編碼表。1.ASCII最早的也是最基本最重要的一種英美文字的字符集,也可以說是編碼。ASCII被定為國際標準之后的代號為ISO-646。由于ASCII碼只使用了低7位二進制位,其他的認為無效,它僅使用了0~127這128個碼位。剩下的128個碼位便可以用來做擴展,并且ASCII的字符集序號與存儲的編碼完全相同。2.ISO-8859-*隨著西歐國家的崛起,在ASCII的基礎上對剩余的碼位做了擴展,就形成了一系列ISO-8859-*的標準。例如,為英語做了專門擴展的字符集編碼標準編號ISO-8859-1,也叫做Latin-1。由于西歐小國眾多,稍有發(fā)言權(quán)的小國就紛紛在ASCII的基礎上擴展形成自己的編碼,這就是ISO-8859-*系列。很顯然ISO-8859-*系列的碼也是8位的,并且其字符集序號與存儲的編碼也完全相同。3.GB2312GB2312字集是簡體字集,全稱為GB2312(80)字集,共包括國標簡體漢字6763個。4.Unicode國際標準組織于1984年4月成立ISO/IECJTC1/SC2/WG2工作組,針對各國文字、符號進行統(tǒng)一性編碼。1991年美國跨國公司成立UnicodeConsortium,并于1991年10月與WG2達成協(xié)議,采用同一編碼字集。目前Unicode是采用16位編碼體系,其字符集內(nèi)容與ISO10646的BMP(BasicMultilingualPlane)相同。Unicode于1992年6月通過DIS(DrafInternationalStandard),目前版本V2.0于1996公布,內(nèi)容包含符號6811個,漢字20902個,韓文拼音11172個,造字區(qū)6400個,保留20249個,共計65534個。Unicode編碼后的大小是一樣的。例如,一個英文字母“a”和一個漢字“好”,編碼后都是占用的空間大小是一樣的,都是兩個字節(jié)。5.GBKGBK字集包括了GB字集、BIG5字集和一些符號,共包括21003個字符。GBK編碼是GB2312編碼的超集,向下完全兼容GB2312,同時GBK收錄了Unicode基本多文種平面中的所有CJK漢字。同GB2312一樣,GBK也支持希臘字母、日文假名字母、俄語字母等字符,但不支持韓語中的表音字符(非漢字字符)。GBK還收錄了GB2312不包含的漢字部首符號、豎排標點符號等字符。6.UTF-8UTF-8是用以解決國際上字符的一種多字節(jié)編碼,它對英文使用8位(即一個字節(jié)),中文使用24位(三個字節(jié))來編碼。UTF-8包含全世界所有國家需要用到的字符,是國際編碼,通用性強。UTF-8編碼的文字可以在各國支持UTF8字符集的瀏覽器上顯示。例如,使用UTF-8編碼,則在外國人的英文IE上也能顯示中文,它們無須下載IE的中文語言支持包,在實際開發(fā)中采用UTF-8編碼是最常見的。字符編碼和解碼在前面講解過Java的轉(zhuǎn)換流,將字節(jié)流轉(zhuǎn)換為字符流,或者將字符流轉(zhuǎn)換為字節(jié)流,這實際上涉及到編碼和解碼,將字符流轉(zhuǎn)換為字節(jié)流稱為編碼,便于計算機識別;將字節(jié)流轉(zhuǎn)換為字符流稱為解碼,便于用戶看懂。在轉(zhuǎn)換流中,有可能出現(xiàn)亂碼的情況,出現(xiàn)這種情況原因一般是編碼與解碼字符集不統(tǒng)一,另外缺少字節(jié)數(shù)或長度丟失,也會出現(xiàn)亂碼。接下來通過一個案例來演示字符的編碼和解碼,如例所示。字符傳輸前面講解的I/O文件傳輸用的都是Windows系統(tǒng)默認編碼字符集GBK,讀寫文件沒有發(fā)生亂碼問題。但如果讀取一個編碼格式為GBK的文件,將讀取的數(shù)據(jù)寫入一個編碼格式為UTF-8的文件時,則會出現(xiàn)亂碼的情況,接下來通過一個案例演示這種情況,示例代碼參考教材9.7.3節(jié)。在例中,分別以GBK字符集和UTF-8字符集創(chuàng)建兩個文件file1.txt和file2.txt,將兩個字符串分別寫入兩個文件,然后用字符輸入流讀取file2.txt的內(nèi)容,最后用字符輸出流將讀取到的內(nèi)容輸出到file1.txt,生成文件如圖所示。NIO概述NI/O(NewInput/Output)也稱為NewI/O。是一種基于通道和緩沖區(qū)的I/O方式,與之前學習面向流的I/O相比,NI/O是面向緩存的,其效率會提高很多。而且,NI/O是一種同步非阻塞的I/O模型,會不斷輪詢I/O事件檢查其是否準備就緒,在等待I/O的時候,可以同時做其他任務。在NI/O中同步的核心就是Selector,Selector代替了線程本身輪詢I/O事件,避免了阻塞的同時減少了不必要的線程消耗;非阻塞的核心就是通道和緩沖區(qū),當I/O事件就緒時,可以通過寫道緩沖區(qū),保證I/O的成功,而無需線程阻塞式地等待。在JavaAPI中提供了兩套NI/O,一套是針對標準輸入輸出NI/O,另一套就是網(wǎng)絡編程NI/O。NIO基礎NI/O主要有三大核心部分:Channel(通道),Buffer(緩沖區(qū)),Selector(選擇器)。傳統(tǒng)I/O基于字節(jié)流和字符流進行操作,而NI/O基于Channel(通道)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論