版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第11章 Java數(shù)據(jù)流,內(nèi)容提要 大部分程序都需要數(shù)據(jù)的輸入和輸出, 從鍵盤(pán)讀取數(shù)據(jù), 向文件寫(xiě)入數(shù)據(jù)或從文件獲取數(shù)據(jù), 將數(shù)據(jù)通過(guò)打印機(jī)打印出來(lái), 通過(guò)網(wǎng)絡(luò)進(jìn)行信息交換,本章介紹Java標(biāo)準(zhǔn)程序庫(kù)中各種處理I/O 操作的類(lèi) 的用途及使用方法。,第1節(jié) 輸入/輸出概念,一、 流的概述 Java使用流(stream)來(lái)執(zhí)行輸入輸出(I/O)的功能,流是一種數(shù)據(jù)的源頭和目的之間的通信途徑。 用于讀入數(shù)據(jù)稱(chēng)為輸入流(input stream), 用于寫(xiě)出數(shù)據(jù)稱(chēng)為輸出流(output stream)。,當(dāng)使用流時(shí)需要使用java.io包,因此在涉及數(shù)據(jù)流操作的程序中都要先導(dǎo)入java.io包:imp
2、ort java.io.*;,二、 I/O類(lèi)層次結(jié)構(gòu) Java提供超過(guò)60個(gè)不同的流類(lèi)型,這些流類(lèi)包含在上面提到的java.io包中, 四個(gè)基本的抽象類(lèi): InputStream、OutputStream、Reader和Writer。 你不能創(chuàng)建這四個(gè)類(lèi)型的對(duì)象,但是其他的方法的返回值可以是他們,事實(shí)上,我們經(jīng)常使用的是 派生自他們的子類(lèi)。 java.io包的結(jié)構(gòu)如圖11-1:,三、 標(biāo)準(zhǔn)輸入輸出 在System類(lèi)中有三個(gè)靜態(tài)域System.in、System.out和System.err。 可以在標(biāo)準(zhǔn)位置使用這三個(gè)系統(tǒng)流進(jìn)行I/O操作。 public static InputStream i
3、n 讀取字符數(shù)據(jù)的標(biāo)準(zhǔn)輸入流。 public static PrintStream out 顯示或打印輸出信息的標(biāo)準(zhǔn)輸出流 public static PrintStream err 輸出錯(cuò)誤信息的標(biāo)準(zhǔn)錯(cuò)誤流。,例11-1:標(biāo)準(zhǔn)輸入輸出舉例,程序運(yùn)行如下: 輸入:a,b,c,d 輸出:a,b,c,d 輸入:Z (注:輸入復(fù)合鍵CTRL-Z) 輸出: program end,第2節(jié) 文件的順序訪(fǎng)問(wèn),一、 字節(jié)流 字節(jié)流是用來(lái)讀寫(xiě)8位的數(shù)據(jù),由于不會(huì)對(duì)數(shù)據(jù)作任何轉(zhuǎn)換,因此可以用來(lái)處理二進(jìn)制的數(shù)據(jù)。 (一)、OutputStream (二)、InputStream (三)、FileInputStre
4、am和FileOutputStream (四)、ByteArrayInputStream和ByteArrayOutputStream (五)、BufferedInputStream和BufferedOutputStream,InputStream,OutputStream,輸入流 輸出流的類(lèi)繼承關(guān)系,(一)、OutputStream,OutputStream為所有的字節(jié)流輸出流的父類(lèi),因此所有源自于它的類(lèi)也會(huì)繼承下列的方法: void write(int b):寫(xiě)入一個(gè)字節(jié)的數(shù)據(jù)。 void write(byte buttfer):講數(shù)組buffer的數(shù)據(jù)寫(xiě)入流。 void write(byt
5、e,int offset int len):從bufferoffset開(kāi)始,寫(xiě)入len個(gè)字節(jié)的數(shù)據(jù)。 void flush():強(qiáng)制將buffer內(nèi)的數(shù)據(jù)寫(xiě)入流。 void close():關(guān)閉流。,(二)、InputStream InputStream為所有的字節(jié)輸入流的父類(lèi),因此所有源于它的類(lèi)也會(huì)繼承下列的方法: int read():讀入一個(gè)字節(jié)的數(shù)據(jù),如果已達(dá)到文件的末端,返回值為-1。 int read(byte buffer):讀出buffer大小的數(shù)據(jù),返回值為實(shí)際所讀出的字節(jié)。 int read(byte buffer,int offset,int len):將讀出的數(shù)據(jù)從bu
6、fferoffset開(kāi)始,寫(xiě)入len個(gè)字節(jié)至buffer中,返回值為實(shí)際所讀出的字節(jié)數(shù)目。 int available(): 返回流內(nèi)可供讀取的字節(jié)數(shù)目。 long skip(long n): 跳過(guò)n個(gè)字節(jié)的數(shù)據(jù),返回值為實(shí)際所跳過(guò)的數(shù)據(jù)數(shù)。 void close(): 關(guān)閉流。,(三)、FileInputStream和FileOutputStream FileInputStream用來(lái)讀取一個(gè)文件,FileOutPutStream用來(lái)將數(shù)據(jù)寫(xiě)入文件。 常用的構(gòu)造函數(shù)如下: FileInputStream(String name): 打開(kāi)文件name用來(lái)讀取數(shù)據(jù)。 FileInputStrea
7、m(File file): 打開(kāi)文件file用來(lái)讀取數(shù)據(jù)。 FileOutputStream(String name): 打開(kāi)文件name用來(lái)寫(xiě)入數(shù)據(jù)。 FileOutputStream(File file): 打開(kāi)文件file用來(lái)寫(xiě)入數(shù)據(jù)。 FileOutputStream(String name,Boolean append): 打開(kāi)文件name用來(lái)寫(xiě)入數(shù)據(jù),若append為true,則寫(xiě)入的數(shù)據(jù)會(huì)加到原有文件后面,否則,覆蓋原有的文件。,將FileExam.java復(fù)制為FileExam.java.bak。 程序首先打開(kāi)FileExam.java文件, 使用read()將其內(nèi)容逐字節(jié)讀取
8、出來(lái)(如果返回值為-1,則表明已到達(dá)文件尾端), 再使用write()將讀出的字節(jié)逐一寫(xiě)入另一個(gè)文件FileExam.java.bak中。 若文件無(wú)法打開(kāi)(例如FileExam.java不存在)或無(wú)法生成(FileExam.java.bak),會(huì)拋出FileNotFoundException異常,若讀寫(xiě)出錯(cuò),則會(huì)拋出IOException異常。 最后,我們?cè)趂inally中關(guān)閉文件。,例11-2 FileIO.java,(四)、ByteArrayInputStream和 ByteArrayOutputStream 使用這兩個(gè)流類(lèi)可以將數(shù)據(jù)轉(zhuǎn)換到一個(gè)數(shù)據(jù)類(lèi)型為字節(jié)類(lèi)型的數(shù)組(byte array
9、)中, ByteArrayInputStream和ByteArrayOutputStream并沒(méi)有牽涉到真正的文件,他們使用內(nèi)存(一個(gè)流緩沖區(qū))作為I/O流的源頭及目的。 ByteArrayInputStream用來(lái)從一個(gè)流緩沖區(qū)(字節(jié)數(shù)組)中讀入數(shù)據(jù), ByteArrayOutputStream用來(lái)將數(shù)據(jù)轉(zhuǎn)換至一個(gè)流緩沖區(qū)中 由于流對(duì)象的內(nèi)容存放在內(nèi)存中,所以可提供較快的操作。,常用的構(gòu)造函數(shù)如下: ByteArrayInputStream(byte buffer): 生成一個(gè)字節(jié)數(shù)組的輸入流,并指定一個(gè)字節(jié)數(shù)組buffer為此輸入流的流緩沖區(qū)。 ByteArrayOutputStream(
10、): 生成一個(gè)字節(jié)數(shù)組的輸出流,其緩沖區(qū)的默認(rèn)初始大小為32字節(jié),若有需要,緩沖區(qū)的大小會(huì)隨之增加。 ByteArrayOutputStream(int size): 同上,但分配size字節(jié)的初始大小給此緩沖區(qū)。 ByteArrayOutputStream的一些常用方法: int size() : 返回此流緩沖區(qū)的大小。 byte toByteArray() : 生成一個(gè)新的字節(jié)數(shù)組,并將流的內(nèi)容復(fù)制到此字節(jié)數(shù)組。 String toString() : 將流的內(nèi)容轉(zhuǎn)換為String對(duì)象。 下面程序讀入文件data.in,將其內(nèi)容寫(xiě)入內(nèi)存中(一個(gè)字節(jié)數(shù)組),接著轉(zhuǎn)換為String對(duì)象,并將該
11、String對(duì)象內(nèi)的令牌解析出來(lái)。,例11-3 ByteIO.java,若輸入數(shù)據(jù)(data.in中的數(shù)據(jù))如下: Aa 00001 92 69 95 Bb 00002 77 92 96 則程序輸出如下: Aa 00001 92 69 95 Bb 00002 77 92 96,(五)、BufferedInputStream和BufferedOutputStream 有時(shí)候我們?cè)谔幚韥?lái)自輸入流的數(shù)據(jù)時(shí),希望能夠重設(shè)流并回到較靠前的位置。 這需要使用緩沖來(lái)實(shí)現(xiàn),通過(guò)使用BufferedInputStream類(lèi),可以利用mark和reset方法在緩沖的輸入流中往回移動(dòng); 同時(shí),通過(guò)使用Buffere
12、dOutputStream類(lèi),可以先將輸出寫(xiě)到內(nèi)存緩沖區(qū),再使用flush方法將數(shù)據(jù)寫(xiě)入磁盤(pán),而不必每輸出一個(gè)字節(jié)就向磁盤(pán)中寫(xiě)一次數(shù)據(jù)。,1BufferedInputStream類(lèi)的構(gòu)造函數(shù)和方法 BufferedInputStream(InputStream in): 構(gòu)造一個(gè)BufferedInputStream。 BufferedInputStream(InputStream in, int size): 構(gòu)造一個(gè)具有給定的緩沖區(qū)大小的BufferedInputStream。 int available(): 得到可以從這個(gè)輸入流讀取的字節(jié)數(shù)。 void close(): 關(guān)閉流。 vo
13、id mark(int readlimit): 在這個(gè)輸入流的當(dāng)前位置做標(biāo)記。 boolean markSupported(): 檢查這個(gè)輸入流是否支持mark和reset方法。 int read(): 讀取數(shù)據(jù)的下一個(gè)字節(jié)。 int read(byte b, int off, int len): 從這個(gè)字節(jié)輸入流的給定偏移量處開(kāi)始讀取字節(jié),存儲(chǔ)到給定的字節(jié)數(shù)組。 void reset(): 將緩沖區(qū)重新設(shè)置到加標(biāo)記的位置。 long skip(long n) : 跳過(guò)n個(gè)字節(jié)的數(shù)據(jù)。,2BufferedOutputStream類(lèi)的構(gòu)造函數(shù)和方法: BufferedOutputStream(O
14、utputStream out):構(gòu)造一個(gè)BufferedOutputStream。 BufferedOutputStream(OutputStream out, int size):構(gòu)造一個(gè)具有給定的緩沖區(qū)大小的BufferedOutputStream。 void flush(): 刷新這個(gè)流。 void write(byte b, int off, int len): 將給定的字節(jié)數(shù)組寫(xiě)到這個(gè)緩沖輸出流。 void write(int b) : 將給定的字節(jié)寫(xiě)到這個(gè)緩沖輸出流。 下面我們通過(guò)一個(gè)例子來(lái)演示BufferedInputStream類(lèi)的作用,程序讀取并顯示字節(jié)數(shù)組中的字符,當(dāng)遇到
15、%字符時(shí),如果和下一個(gè)%字符之間的字符沒(méi)有空格,則兩個(gè)%之間的字符不顯示:,例11-4 bufinstreams.java,運(yùn)行結(jié)果: This is a test of buffer#Streams,二、 字符流 盡管字節(jié)流更快更高效,但是人們讀起來(lái)十分困難(因?yàn)槭嵌M(jìn)制)。 接下來(lái)我們講述文本格式的輸入輸出,即字符流。 字符流主要是用來(lái)支持Unicode的文字內(nèi)容,絕大多數(shù)在字節(jié)流中所提供的類(lèi),都有相對(duì)應(yīng)的字符流的類(lèi)。,Writer,(一)、Reader和Writer,Reader是所有輸入字符流的基類(lèi),Writer是所有輸出字符流的基類(lèi)。 你可以使用從這兩個(gè)類(lèi)派生出的類(lèi)來(lái)讀寫(xiě)字符流,這兩
16、個(gè)類(lèi)常用的方法與InputStream、OutputStream相類(lèi)似,區(qū)別在于參數(shù)內(nèi)的byte需要改為char。,(二)、InputStreamReader和OutputStreamWriter 為了從鍵盤(pán)讀取按鍵,常常從System.in構(gòu)造一個(gè)InputStreamReader流,然后使用InputStreamReader類(lèi)的read方法讀取用戶(hù)輸入的內(nèi)容。 而OutputStreamWriter與InputStreamReader相對(duì),支持輸出流。,1InputStreamReader類(lèi)的構(gòu)造函數(shù)和方法: InputStreamReader(InputStream in) : 構(gòu)造一個(gè)
17、InputStreamReader。 InputStreamReader(InputStream in, String enc) : 使用命名的字符編碼構(gòu)造一個(gè)InputStreamReader。 void close() : 關(guān)閉流。 String getEncoding() : 得到字符編碼的名稱(chēng)。 int read() : 讀取一個(gè)字符。 int read(char cbuf, int off, int len) : 將字符讀到數(shù)組中。 boolean ready() : 如果這個(gè)流已準(zhǔn)備好,返回True。,2OutputStreamWriter類(lèi)的構(gòu)造函數(shù)和方法: OutputStre
18、amWriter(OutputStream out) : 構(gòu)造一個(gè)OutputStreamWriter。 OutputStreamWriter(OutputStream out, String enc) : 使用命名的字符編碼構(gòu)造一個(gè)OutputStreamWriter。 void close() : 關(guān)閉流。 void flush() : 刷新流。 String getEncoding() : 得到這個(gè)流使用的字符編碼的名稱(chēng)。 void write(char cbuf, int off, int len) : 寫(xiě)字符數(shù)組的一部分。 void write(int c) : 寫(xiě)一個(gè)字符。 voi
19、d write(String str, int off, int len) : 寫(xiě)一個(gè)字符串的一部分。 下面的程序利用InputStreamReader從鍵盤(pán)接受輸入,再將輸入的字符顯示出來(lái):,例11-5,程序運(yùn)行結(jié)果如下: 輸入:a,b,c,d 輸出:a,b,c,d 輸入:1,2,3,4 輸出:1,2,3,4 輸入:Z 輸出:Bye,(三)、FileReader 你可以使用FileReader類(lèi)創(chuàng)建一個(gè)字符流來(lái)讀取一個(gè)文件,F(xiàn)ileReader類(lèi)只具有從InputStreamReader繼承的功能,但是它有自己的構(gòu)造函數(shù): FileReader(File file) : 構(gòu)造一個(gè)FileRe
20、ader。 FileReader(FileDescriptor fd) : 從一個(gè)文件描述符構(gòu)造一個(gè)FileReader。 FileReader(String filename) : 從一個(gè)文件名構(gòu)造一個(gè)FileReader。 在下面的例子中,我們打開(kāi)一個(gè)文件file.txt(內(nèi)容為:”Hello from file”),將文件的內(nèi)容讀到緩沖區(qū),然后顯示數(shù)據(jù):,例11-6,程序運(yùn)行結(jié)果如下: Hello from file,(四)、FileWriter FileWriter與FileReader對(duì)應(yīng),用來(lái)將字符緩沖區(qū)中的數(shù)據(jù)寫(xiě)到文件中。這個(gè)類(lèi)也只定義了構(gòu)造函數(shù),此外只具有從OutputStre
21、amWriter繼承的功能。 FileWriter(File file) : 從File對(duì)象構(gòu)造一個(gè)FileWriter。 FileWriter(FileDescriptor fd) : 從文件描述符構(gòu)造一個(gè)FileWriter。 FileWriter(String filename) : 從文件名構(gòu)造一個(gè)FileWriter。 FileWriter(String filename, boolean append):構(gòu)造一進(jìn)行附加的FileWriter。 在下面例子中,我們分別采用三種方式:逐字符地寫(xiě)數(shù)據(jù)、一次寫(xiě)入所有數(shù)據(jù)、分批寫(xiě)數(shù)據(jù),使用FileWriter:,例11-7,程序執(zhí)行后: fi
22、le1.txt和file2.txt的內(nèi)容為:This is a string of text. file3.txt的內(nèi)容為:is a strin,(五)、CharArrayReader和CharArrayWriter 可以用來(lái)從數(shù)組讀寫(xiě)字符。 1CharArrayReader類(lèi)的構(gòu)造函數(shù)和方法如下: CharArrayReader(char buf): 從給定的字符數(shù)組構(gòu)造一個(gè)CharArrayReader。 CharArrayReader(char buf, int offset, int length): 同上。 void close(): 關(guān)閉流。 void mark(int readA
23、headLimit): 在流中的當(dāng)前位置加標(biāo)記。 boolean markSupported(): 如果這個(gè)流支持mark操作,那么返回True。 int read(): 讀取一個(gè)字符。 int read(char b, int off, int len): 將字符讀入數(shù)組的一部分。 boolean ready(): 檢查這個(gè)流是否已經(jīng)準(zhǔn)備好被讀取。 void reset(): 將流重設(shè)到最近的標(biāo)記。 long skip(long n): 跳過(guò)n個(gè)字符。,2CharArrayWriter類(lèi)的構(gòu)造函數(shù)和方法如下: CharArrayWriter(): 構(gòu)造一個(gè)CharArrayWriter。 C
24、harArrayWriter(int initialSize):構(gòu)造一個(gè)具有給定初始大小的CharArrayWriter。 void close(): 關(guān)閉流。 void flush(): 刷新流。 void reset(): 重設(shè)流。 int size(): 得到緩沖區(qū)的當(dāng)前大小。 char toCharArray(): 得到輸入數(shù)據(jù)的副本。 String toString(): 將輸入數(shù)據(jù)轉(zhuǎn)換為字符串。 void write(char c, int off, int len): 將字符寫(xiě)到緩沖區(qū)中。 void write(int c): 將一個(gè)字符寫(xiě)到緩沖區(qū)中。 void write(St
25、ring str, int off, int len): 將字符串的一部分寫(xiě)到緩沖區(qū)中。 void writeTo(Writer out): 將緩沖區(qū)的內(nèi)容寫(xiě)到另一個(gè)字符流中。 下面我們演示CharArrayReader類(lèi)的作用,該例從字符數(shù)組中逐個(gè)讀取字符并顯示:,例11-8,程序運(yùn)行結(jié)果為: This is a string of text.,第3節(jié) 文件的隨機(jī)訪(fǎng)問(wèn),前面所提及的流都是順序的I/O流,無(wú)法隨機(jī)的讀寫(xiě)文件的某個(gè)位置,如果需要對(duì)文件進(jìn)行隨機(jī)的訪(fǎng)問(wèn),必須使用RandomAccessFile類(lèi),其常用的構(gòu)造函數(shù)如下:,RandomAccessFile(File file, Stri
26、ng mode): 構(gòu)造一個(gè)隨機(jī)訪(fǎng)問(wèn)文件流,file為被訪(fǎng)問(wèn)的文件對(duì)象,mode是用來(lái)指定存取的模式,mode可以為r(讀)、w(寫(xiě))或rw(讀寫(xiě))。 RandomAccessFile(String name,String mode):構(gòu)造一個(gè)隨機(jī)訪(fǎng)問(wèn)文件流,以便訪(fǎng)問(wèn)由字符串name指定名字的文件,mode參數(shù)使用同上。 RandomAccessFile類(lèi)提供的用來(lái)讀取某種基本數(shù)據(jù)類(lèi)型的數(shù)據(jù)或字符串的方法如下: boolean readBoolean() byte readByte() char readChar() double readDouble() float readFloat()
27、int readInt() long readLong() short readShort() String readLine(),RandomAccessFile類(lèi)提供的用來(lái)向文件中寫(xiě)入某種基本類(lèi)型的數(shù)據(jù)或字符串的方法如下: void writeByte(byte b) void writeBytes(String s) void writeChar(char c) void writeChars(String s) void writeDouble(double d) void writeFloat(float f) void writeInt(int i) void writeLong(
28、long l) void writeShort(short s),和目前文件位置有關(guān)的方法: void seek(long pos): 將文件指針移到pos(不可為負(fù))的位置,這是相對(duì)于文件的初始位置的值(初始值為0)。 long getFilePointer(): 得到目前文件指針的位置(相對(duì)于文件初始位置)。 long length(): 得到文件的長(zhǎng)度。,第4節(jié) 目錄和文件管理,File類(lèi)是一個(gè)和流無(wú)關(guān)的類(lèi)。 File對(duì)象可以用來(lái)生成與文件(及其所在的路徑)或目錄結(jié)構(gòu)相關(guān)的對(duì)象, 由于不同的系統(tǒng)可能會(huì)有不同的目錄結(jié)構(gòu)表示法, 使用File類(lèi)可以達(dá)到與系統(tǒng)無(wú)關(guān)的目的(使用抽象的路徑表示法)
29、。 類(lèi)java.io.File提供了獲得文件基本信息及操作文件的一些方法。,File類(lèi)的構(gòu)造函數(shù): File(String path): 將一個(gè)代表路徑的字符串轉(zhuǎn)換為抽象的路徑表示法。 File(String parent, String child): parent代表目錄,child代表文件(不可為空)。 File(File parent, String child): 同上。 例如: File myFile; myFile = new File(“file.txt”); 或 myFile = new File(“/”,”file.txt”); 或 File myDir=new File(
30、“/”); myFile = new File(myDir,”file.txt”);,使用何種構(gòu)造函數(shù)經(jīng)常由其他被訪(fǎng)問(wèn)的文件對(duì)象來(lái)決定。 例如, 當(dāng)在應(yīng)用程序中只用到一個(gè)文件時(shí),那么使用第一種構(gòu)造函數(shù)最為實(shí)用; 但是如果使用了一個(gè)共同目錄下的幾個(gè)文件,則使用第二種或第三種構(gòu)造函數(shù)會(huì)更方便。,File類(lèi)一些常用的方法 boolean exists(): 若該文件或目錄存在,返回True。 boolean isDirectory(): 若為目錄則返回True。 File listFiles(): 得到該對(duì)象所代表的目錄下的File對(duì)象數(shù)組。 String list(): 同上。 long leng
31、th(): 得到和該對(duì)象相關(guān)的文件大小,若不存在,返回0。 String toString(): 得到抽象路徑表示法。 String getParent(): 得到抽象路徑表示法的目錄部分。 String getName(): 得到抽象路徑表示法的最后一個(gè)部分。 boolean renameTo(File newName):將當(dāng)前File對(duì)象所代表的路徑名改為newName所代表的路徑名。若成功,返回true。 boolean mkdir(): 生成一個(gè)新的目錄。若成功,返回True。 boolean mkdirs(): 生成一個(gè)新的目錄,包含子目錄。若成功,返回true。 boolean d
32、elete(): 刪除目前File對(duì)象代表的文件或目錄,目錄需為空。刪除成功,返回true。,例11-9,使用File類(lèi)的方法得到關(guān)于 文件file.txt的信息,程序運(yùn)行結(jié)果如下: The file is exist? true The file can write? true The file can read? true The file is a file? true The file is a directory? false The files name is: file.txt The files all path is: C:Javafile.txt The files len
33、gth is 15,第5節(jié) 其他常用的流處理,一、管道流 管道(pipe)提供一種線(xiàn)程之間的通信方法,可用于IPC(Inter-Process Communication進(jìn)程間通信) 或是ITC(Inter-Thread Communication線(xiàn)程間通信),但不能夠在不同主機(jī)間進(jìn)行通信。 一個(gè)輸入管道是用來(lái)接收一個(gè)輸出管道所寫(xiě)出的數(shù)據(jù),因此,一個(gè)線(xiàn)程會(huì)負(fù)責(zé)送出(PipedOutputStream對(duì)象)數(shù)據(jù),而另一個(gè)線(xiàn)程序要負(fù)責(zé)接收(PipedInputStream對(duì)象)這些數(shù)據(jù),PipedInputStream和PipedOutputStream對(duì)象總是成對(duì)出現(xiàn)的。并且由于管道的數(shù)據(jù)流是單
34、向的,(一)、創(chuàng)建一組管道通信可以按照下面步驟進(jìn)行(使用無(wú)參數(shù)的構(gòu)造函數(shù)) 建立輸入流: PipedInputStream pipedinputstream = new PipedInputStream(); 建立輸出流: PipedOutputStream pipedoutputstream = new PipedOutputStream(); 將輸入輸出連接起來(lái): pipedinputstream.connect(pipedoutputstream); 或者 pipedoutputstream.connect(pipedinputstream);,(二)、直接建立連接 PipedInput
35、Stream pis = new PipedInputStream(); PipedOutputStream pos = new PipedOutputStream(pis); 或 PipedOutputStream pos = new PipedOutputStream(); PipedInputStream pis = new PipedInputStream(pos);,二、ZIP文件流 ZIP文件是存儲(chǔ)了一個(gè)或多個(gè)文件的存檔文件,通常使用壓縮格式。 從Java 1.1起,Java能夠處理GZIP和ZIP格式的存檔文件。 與其他的流不同,處理ZIP文件的類(lèi)ZipInputStream和ZipOutputStream在java.util.zip,而不在java.io中,因此在使用ZIP文件流時(shí)記住要加上:import java.util.*;,(一)、將文件寫(xiě)入ZIP文件 生成和所要生成的ZIP文件相關(guān)聯(lián)的ZipOutputStream對(duì)象。 一個(gè)ZIP文件往往不止含有一個(gè)壓縮文件,我們將每個(gè)要加入的文件稱(chēng)為一個(gè)ZIP入口,我們使用ZipEntry(String fileNa
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 嘉興名人介紹課件
- 暑假學(xué)生社會(huì)實(shí)踐總結(jié)
- 醫(yī)院后勤禮儀培訓(xùn)課件
- 秋人教版八年級(jí)物理上冊(cè)課件:第六章第1節(jié) 質(zhì) 量
- 結(jié)構(gòu)力學(xué)第2章 結(jié)構(gòu)的幾何構(gòu)造分析
- 助餐配餐員培訓(xùn)課件模板
- 交通運(yùn)輸局培訓(xùn)課件
- 2024年艾滋病知識(shí)宣傳工作簡(jiǎn)報(bào)
- 2025 小學(xué)一年級(jí)數(shù)學(xué)下冊(cè)實(shí)踐課(記錄一周天氣)課件
- 城市軌道交通信號(hào)基礎(chǔ)設(shè)備維護(hù)課件 項(xiàng)目四 信號(hào)通信設(shè)備
- 2025年新聞?dòng)浾哔Y格證及新聞寫(xiě)作相關(guān)知識(shí)題庫(kù)附答案
- 長(zhǎng)春財(cái)經(jīng)學(xué)院《計(jì)算機(jī)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東省中山市2024-2025學(xué)年八年級(jí)上學(xué)期期末考試道德與法治試卷(含答案)
- 2025年湖南理工職業(yè)技術(shù)學(xué)院?jiǎn)握校ㄓ?jì)算機(jī))測(cè)試模擬題庫(kù)必考題
- DB32∕T 5188-2025 經(jīng)成人中心靜脈通路裝置采血技術(shù)規(guī)范
- 華師 八年級(jí) 數(shù)學(xué) 下冊(cè)《17.2 平行四邊形的判定 》課件
- 主板維修課件
- 2025黑龍江大慶市工人文化宮招聘工作人員7人考試歷年真題匯編帶答案解析
- 2026中央紀(jì)委國(guó)家監(jiān)委機(jī)關(guān)直屬單位招聘24人考試筆試模擬試題及答案解析
- 2026年內(nèi)蒙古化工職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試必刷測(cè)試卷附答案解析
- 財(cái)務(wù)數(shù)字化轉(zhuǎn)型與業(yè)財(cái)數(shù)據(jù)深度融合實(shí)施路徑方案
評(píng)論
0/150
提交評(píng)論