黑馬程序員java培訓就業(yè)班筆記day23(IO其他類)總結(jié)_第1頁
黑馬程序員java培訓就業(yè)班筆記day23(IO其他類)總結(jié)_第2頁
黑馬程序員java培訓就業(yè)班筆記day23(IO其他類)總結(jié)_第3頁
黑馬程序員java培訓就業(yè)班筆記day23(IO其他類)總結(jié)_第4頁
黑馬程序員java培訓就業(yè)班筆記day23(IO其他類)總結(jié)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Day23總結(jié):1、 打印流:就是輸出流,可以直接操作輸入流和文件printStream:字節(jié)流特點:1、構(gòu)造函數(shù)接收File對象、字符路徑、字符輸出流、以為著打印的目的可以是很多。 2、該對象具有特有的方法,print println可以打印任何數(shù)據(jù)類型的數(shù)據(jù)。 3、特有的printf方法可以保持任意類型的數(shù)據(jù)表現(xiàn)形式的原樣性,將數(shù)據(jù)輸出到目的地,對于OutputStream父類中的write是將數(shù)據(jù)的最低字節(jié)寫出去、API:為其他的輸出流添加了功能,使他們能夠方法便的打印各種數(shù)據(jù)值表示形式,它還提供了其他兩項功能。與其他輸出流不同,printStream永遠不會拋出IOException異

2、常,而是異常情況僅設(shè)置可通過checkError方法測試的內(nèi)部標識,另外,為了自動刷新,可以創(chuàng)建一個printStream,這以為著可在寫入byte數(shù)組之后自動調(diào)用flush方法,可吊桶其中一個println方法,或者寫入一個換行符或者字節(jié)(rn),printStream打印的所有字符都使用平臺默認字符編碼轉(zhuǎn)換為字節(jié),在需要寫入字符而不是寫入字節(jié)的情況下,應(yīng)該使用printWriter類。注意:能寫一個整數(shù)、還能打印一個整數(shù)為什么?Write(97);a0000-0000 0000-0000 0000-0000 0110-0001 97將最后一個八位寫入到硬盤,也就是最后一個字節(jié)0110-00

3、01記事本把這個二進制解析了,然后查表返回a;Print(97);你看到是什么?目的里面就是什么?97原理:先把97->"97"->"97".getBytes()(2個字節(jié))printWriter字符流:使用頻繁,因為需要將數(shù)據(jù)從服務(wù)端打印到客戶端特點:1、 當操作的數(shù)據(jù)是字符時,可以選擇printWriter比printStream更方便。2、 它的構(gòu)造函數(shù)可以接收File對象,字符串路徑、字節(jié)輸出流、字符流。3、 可以在構(gòu)造函數(shù)中、如果參數(shù)是輸出流,那么可以通過指定另一個參數(shù)true來完成自動刷新,該方法只對println()有效。實現(xiàn)代

4、碼:BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));PrintWriter out=new PrintWriter(new BufferedWriter( new ("out.txt"),true);/加上true它能自動刷新,但是只能對println有效,需要高效,而且具備自動刷新的功能的只有字符流和字節(jié)流,所以需要封裝為字符輸出流。String line=null;While(line=buf,.readLine()!=null)If("over".eq

5、uals(line)Break;Out.println(line);Out.close();總結(jié):什么時候用?當需要保證數(shù)據(jù)表現(xiàn)的原樣性時,就可以使用打印流的打印方法來完成,保證(表現(xiàn)形式)原樣性的原理:其實就是將數(shù)據(jù)變成字符串,再進行寫入操作。 2、 序列流:按照一定順序排列。SequenceInputStream:對多個流進行合并。作用:將多個字節(jié)讀取流合并成一個讀取流。特點:1、 將多個自己流合并成一個讀取流,將多個源合并成一個源,操作起來方便。2、 需要的枚舉接口可以通過collections.enumeration(collection);練習:切割照片注意:切割有兩種方式:1、按照

6、大小,2、按照文件個數(shù)。3、 操作對象:將對象寫入設(shè)備的方式,稱為對象的持久化存儲。ObjectInputStream ObjectOutputStream實現(xiàn)代碼:Public static void main(String args)writeObj();readObj();sPublic static void readObj() fis=new ("obj.txt");ObjectInputStream ois=new ObjectInputStream(fis);Person p=(Person)ois.readObject();Sop(p.getAge()+p.

7、getName();Ois.close();Public static void writeObj()FilleOutputStream fos=new ("obj.txt");Person p=new Person("wangwu",34);ObjectOutputStream oos=new ObjectOutputStream(fos);oos.writeObject(p);Oos.close();給需要序列化的類打個標記,seriablizeble接口注意:框架和面試的時候常面到,比如對象的聲明周期的延長,以前是內(nèi)存,現(xiàn)在存儲到硬盤中,靜態(tài)數(shù)據(jù)不

8、會被序列化,eg:private static String name,靜態(tài)之后讀取的是34,null;因為靜態(tài)之后name存儲到了方法區(qū),寫到硬盤中與它無關(guān)。Transient:可以讓非靜態(tài)的數(shù)據(jù)不被序列化。細節(jié):1、 用ObjectOutputStream寫出的數(shù)據(jù)只能用ObjectInputStream讀取。2、 文件存儲的是對象的時候,使用object來表示擴展名的。4、 RandomAccessFile:隨進訪問文件,此類的實例支持對隨進訪問的文件讀和寫。特點:1、 即可以讀取又可以寫入2、內(nèi)部維護了一個大型的byte數(shù)組,通過對數(shù)組的操作完成讀取和寫入3、 通過get方法獲取指針的

9、位置,還可以通過seek方法獲取指針的位置。4、 該對象內(nèi)容應(yīng)該封裝了字節(jié)輸入流和字節(jié)輸出流。5、 該對象只能操作文件。實現(xiàn)代碼:package cn.itcast.f.io.random_access.demo;import java.io.;import java.io.IOException;import java.io.RandomAccessFile;public class RandomAccess /* * param args * throws IOException */public static void main(String args) throws IOExcepti

10、on /writeFile();/randomRead();randomWrite();/* * 隨機寫入。 */public static void randomWrite()throws IOExceptionRandomAccess = new RandomAccessFile("random.txt", "rw");int num = 0;raf.seek(8*num);/* * 寫入第四個人的信息。王五 102. */raf.write("張三".getBytes();raf.writeInt(65);raf.close()

11、;/* * 隨機讀取。 */public static void randomRead() throws IOException/讀取任意一個人的信息,比如李四。RandomAccess = new RandomAccessFile("random.txt", "r");int n = 1;/只要改變指針的位置,通過seek方法。raf.seek(8*n);byte buf = new byte4;raf.read(buf);/一次讀四個字節(jié)并存儲。String name = new String(buf);int age = raf.readInt()

12、;System.out.println(name+"."+age);System.out.println("pos:"+raf.get();raf.close();/* * 讀取數(shù)據(jù)。random.txt 使用RandomAccessFile. */public static void readFile() throws IOExceptionRandomAccess = new RandomAccessFile("random.txt","r");byte buf = new byte4;raf.read(buf

13、);/一次讀四個字節(jié)并存儲。String name = new String(buf);int age = raf.readInt();System.out.println(name+"."+age);raf.close();/* * 通過RandomAccessFile類創(chuàng)建文件并給文件中寫入數(shù)據(jù)。 * 數(shù)據(jù)以:姓名+年齡為主的個人信息。 */public static void writeFile() throws IOException/* * 創(chuàng)建RandomAccessFile對象時,如果文件不存在則創(chuàng)建, * 如果文件已存在,則不創(chuàng)建。 */RandomAcce

14、ss = new RandomAccessFile("random.txt","rw");raf.write("張三".getBytes();raf.writeInt(97);raf.write("李四".getBytes();raf.writeInt(99);raf.close();通過seek方法操作指針,可以從這個數(shù)組中任意位置上進行讀和寫,還可以完成數(shù)據(jù)的修改,但是要注意數(shù)據(jù)必須是有規(guī)律的。5、 管道流:需要多線程技術(shù)相結(jié)合的流對象。pipedInputStream和PipedOutputStream可以將

15、管道輸出流連接到管道輸入流來創(chuàng)建通信管道。Read方法有一個特點:阻塞,沒數(shù)據(jù)的時候在等待,不往下執(zhí)行Eg:->write->read:能正常執(zhí)行->read->write:這就會出現(xiàn)死鎖。所以管道流需要和多線程技術(shù)相結(jié)合的流有兩個方式進行連接:1、構(gòu)造函數(shù),已初始化就明確,2、connect();方法。實現(xiàn)代碼:public static void main(String args) throws IOException PipedInputStream pis = new PipedInputStream();PipedOutputStream pos = new

16、PipedOutputStream();pis.connect(pos);new Thread(new MyRead(pis).start();new Thread(new MyWrite(pos).start();class MyRead implements Runnableprivate PipedInputStream pis;public MyRead(PipedInputStream pis) super();this.pis = pis;public void run()try byte buf = new byte1024;System.out.println("正在

17、讀取中。");int len = pis.read(buf);String str = new String(buf,0,len);System.out.println("str="+str);pis.close(); catch (Exception e) / TODO: handle exceptionclass MyWrite implements Runnableprivate PipedOutputStream pos;public MyWrite(PipedOutputStream pos) super();this.pos = pos;public

18、void run()try System.out.println("數(shù)據(jù)準備寫入。");Thread.sleep(5000);pos.write("管道流,哥們來了!".getBytes();pos.close(); catch (Exception e) / TODO: handle exception6、 IO包中其他的類1、 操作基本數(shù)據(jù)類型DataInputStream和DataOutputStream用于操作基本是的數(shù)據(jù)類型值的對象。實現(xiàn)代碼:Public static void main(Strijng args)readData();Public static void writeData()DataOutputStream dos=new DataOutputStream(new ("data.txt");dos.writeBoolean(true);Dos.close();Public static void readData()DataInputStream dis=new DataInputStream(new ("data.txt");/Int ch=dis.read();/Sop(ch);得按照基本數(shù)據(jù)類型來讀取Boolean b=dis.readBoolean(

溫馨提示

  • 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

提交評論