IO輸入輸出流的學習筆記

------- android培訓java培訓、期待與您交流! ----------

流操作的基本規律:
通過三個明確來完成
1 明確源和目的
    源:輸入流。  InputStream  Reader
  目的:輸出流。  OutputStream  Writer
2 操作的數據是否是純文本?
   是:用字符流
 不是:用字節流
3 當體系明確後,在明確要使用哪個具體的對象。

  通過設備來進行區分:

    源設備:內存,硬盤,鍵盤。
  目的設備:內存,硬盤,控制檯。

1--將一個文件中的數據存儲到另一個文件中。複製文件。
    源: 因爲是源,所以使用讀取流。InputStream  Reader
     是不是操作文件。
     是!這時就可以選擇Reader
     這樣體系就明確了。
     接下來明確要使用該體系中的哪個對象。
   
    明確設備:硬盤。上一個文件
    Reader 體系中可以操作文件的對象是FileReader
    是否需要提高效率:是!,加入Reader體系中緩衝區Buffer額度Reader
    FileReader  fr=new FileReader("a.txt");
    BufferedReader  bufr=new BufferedReader(fr);
  目的:OutputStream  Writer
  是不是純文本?
  是!Writer
  設備:硬盤,一個文件
  Writer體系中可以操作文件的對象Filewriter.
  是否需要提過效率:是!。加入Writer體系中緩衝區BufferedWriter

  FileWriter  fw=new FileWriter("b.txt");
  BufferedWriter  bw=new BufferedWriter(fw);

-------------------------------------------------------------------
2 需求:將鍵盤錄入的數據保存到一個文件中。
這個需求中有源和目的都存在。
那麼分別分析:

源:InputStream  Reader
是不是純文本?
是!用 Reader

設備:鍵盤。對應的對象是System.in
不是選擇Reader嗎?System.in對應的不是節流嗎?
爲了操作鍵盤的文本數據方面。可以轉成字符流。按照字符串操作是最方便
所以既然了Reader 那麼就將System.in轉換爲字符流
用到了Reader體系中轉換流,InputStreamReader

InputStreamReader  isr=new InputStreamReader(System.in);

需要提高效率嗎?需要!BufferedReader

BufferedReader  bufr =new BufferedReader(isr);

目的:OutputStream  Writer
是不是純文本?是!Writer
設備:硬盤,一個文件。使用FileWriter
FileWriter  fw=new FileWriter("c.txt");
需要提高效率嗎?需要

BufferedWriter  bufw=new BufferedWriter();

擴展一下,需要把錄入的數據按照指定的編碼表(utf-8),將數據存到文件中。

目的:OutputStream  Writer
是不是純文本?是!Writer
設備:硬盤,一個文件。使用FileWriter

但是存儲時,需要加入指定編碼表,二指定的編碼表只有轉換流可以指定。
所以要使用的對象是OutputStreamWriter。
而該轉換流對象要接收一個字節輸出流,而且還可以操作的文件
的字節輸入流。FileOutputStream

OutputStreamWriter  osw=new OutputStreamWriter(new FileOutputStream("a.txt"),"utf-8");
需要高效嗎?需要
BufferedWriter  bufw=new BufferedWriter(osw);
所以,記住,轉換流什麼使用,字符和字節之間的橋樑。通常,涉及到字符編碼轉換時,需要用到轉換流。

 

------- android培訓java培訓、期待與您交流! ----------

發佈了26 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章