IO流(四)

1:數據操做流(操做基本類型數據的流)(理解)面試

(1)數據操做流:數組

  能夠讀寫基本類型的數據。
(2)流對象名稱
網絡

 數據輸流:DataInputStream
       DataInputStream(InputStream in)
 數據輸流:DataOutputStream
       DataOutputStream(OutputStream out)dom

 

2:內存操做流(理解)
(1)內存操做流:優化

  用於處理臨時存儲信息的,程序結束,數據就從內存中消失。ui

(2)如下:url

 字節數組:
   ByteArrayInputStream
   ByteArrayOutputStream
 字符數組:
   CharArrayReader
   CharArrayWriter
 字符串:
   StringReader
   StringWriterspa

 

注意:釋放資源
   經過查看源碼咱們知道這裏什麼都沒作,因此根本不須要close()。指針

 

3:打印流(掌握)
(1)打印流:code

  字節打印流---PrintStream

  字符打印流---PrintWriter
(2)特色:
  1:只有寫數據的,沒有讀取數據。只操做目的地,不操做數據源。
  2:能夠操做任意類型的數據。
  3:若是啓用了自動刷新(構造方法中第二參數爲true,即開啓自動刷新)。

   在調用println()方法的時候,可以換行並刷新

  println() --->
    其實等價于于:
   {   bw.write();

      bw.newLine();
      bw.flush();   }

  4:能夠直接操做文件
  問題:哪些流能夠直接操做文件呢?

  • FileInputStream
  • FileOutputStream
  • FileReader
  • FileWriter
  • PrintStream
  • PrintWriter

看API,若是其構造方法可以同時接收File和String類型的參數,通常都是能夠直接操做文件的。

流:
 基本流:就是可以直接讀寫文件的。
 高級流:在基本流基礎上提供了一些其餘的功能。


(3)複製文本文件

 BufferedReader br = new BufferedReader(new FileReader("a.txt")); PrintWriter pw = new PrintWriter(new FileWriter("b.txt"),true); String line = null; while((line=br.readLine())!=null) { pw.println(line); } pw.close(); br.close();


4:標準輸入輸出流(理解)
(1)輸入輸出流:

 System類下面有這樣的兩個字段

  in 標準輸入流

  out 標準輸出流

System類中的兩個成員變量:
   public static final InputStream in    「標準」輸入流。
   public static final PrintStream out   「標準」輸出流。

 InputStream is = System.in;
 PrintStream ps = System.out;

(2)三種鍵盤錄入方式
  1:main方法的args接收參數
  2:System.in經過字符緩衝流包裝標準輸入流實現
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  3:Scanner
    Scanner sc = new Scanner(System.in);
(3)輸出語句的原理和如何使用字符流輸出數據
 A:原理

System.out.println("helloworld"); PrintStream ps = System.out; ps.println("helloworld");

  B:把System.out用字符緩衝流包裝一下使用

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

5:隨機訪問流(理解)
(1)隨機訪問流:

  能夠按照文件指針的位置寫數據和讀數據

  RandomAccessFile類不屬於流是Object類的子類
  但它融合了InputStream和OutputStream的功能。
  支持對文件的隨機訪問讀取和寫入

(2)特色:

public RandomAccessFile(String name,String mode):第一個參數是文件路徑,第二個參數是操做文件的模式。
  模式有四種,咱們最經常使用的一種叫"rw",這種方式表示我既能夠寫數據,也能夠讀取數據。

6:合併流(理解)
(1)合併流:

  把多個輸入流的數據寫到一個輸出流中。
(2)構造方法:
  A:SequenceInputStream(InputStream s1, InputStream s2)
  B:SequenceInputStream(Enumeration<? extends InputStream> e)

7:序列化流(理解)
(1)序列化流:

  能夠把對象寫入文本文件或者在網絡中傳輸

序列化流:把對象按照流同樣的方式存入文本文件或者在網絡中傳輸。          對象 -- 流數據(ObjectOutputStream)
反序列化流:把文本文件中的流對象數據或者網絡中的流對象數據還原成對象。   流數據 -- 對象(ObjectInputStream)


(2)如何實現序列化呢?
  讓被序列化的對象所屬類實現序列化接口。
  該接口是一個標記接口。沒有功能須要實現。
(3)注意問題:
  把數據寫到文件後,在去修改類會產生一個問題。
如何解決該問題呢?
  在類文件中,給出一個固定的序列化id值。
  並且,這樣也能夠解決黃色警告線問題。
(4)面試題:

  • 何時序列化?
  • 如何實現序列化?
  • 什麼是反序列化?

 

transient關鍵字:被標記的屬性不能被序列化。

 

8:Properties(理解)
(1)Properties

  1.Properties:屬性集合類。是一個可以和IO流相結合使用的集合類
  2.Properties 可保存在流中或從流中加載。屬性列表中每一個鍵及其對應值都是一個字符串。

  3.是Hashtable的子類,說明是一個Map集合。

(2)特有功能

A:public Object setProperty(String key,String value)添加元素 B:public String getProperty(String key)獲取元素 C:public Set<String> stringPropertyNames()獲取全部的鍵的集合

(3)和IO流結合的方法

 

//把鍵值對形式的文本文件內容加載到集合中 public void load(Reader reader) public void load(InputStream inStream) //把集合中的數據存儲到文本文件中 public void store(Writer writer,String comments) public void store(OutputStream out,String comments)

 

(4)案例:
A:根據給定的文件判斷是否有鍵爲"lisi"的,若是有就修改其值爲100
B:寫一個程序實現控制猜數字小遊戲程序不能玩超過5次

9:NIO(瞭解)
(1)New IO:

JDK4出現的NIO,對之前的IO操做進行了優化,提供了效率。可是大部分咱們看到的仍是之前的IO

(2)JDK7的NIO的使用
Path:路徑
Paths:經過靜態方法返回一個路徑
Files:提供了常見的功能
  複製文本文件
  把集合中的數據寫到文本文件

相關文章
相關標籤/搜索