MO_or的Java IO流複習總結

1、引言

本篇文章主要記錄關於IO的基礎知識與面試問題

2、總結

1.什麼是IO流,Java IO中重要的5個類以及一個接口?

1)它是一種將數據流從源頭流到目的地。好比文件拷貝,就包括了輸入(複製)輸出(粘貼)流
2)主要包括File、InputStream、OutputStream、Reader、Writer五大類,Serialize接口

2.Java中有幾種類型的流?

1)兩種,字節流,字符流
2)字節流爲:InputStream、OutputStream
3)字符流爲:Reader、Writer

3.字節流和字符流哪一個好?怎麼選擇?

1)若傳輸的資源爲:圖片、視頻、音頻等,按字節排列的資源,字節流相對更好
2)若傳輸的資源爲:字符串、漢字等,按字符排列的資源,字符流相對更好

4.什麼是緩衝區?有什麼做用?

1)緩衝區就是一塊特殊的內存區域。不少狀況下當程序須要頻繁操做一個資源(如文件或數據庫)性能會很低,因此爲了
  提高性能,就能夠將部分資源讀寫到緩衝區上,之後直接今後區域讀寫數據便可,這樣就顯著提高了性能
2)Java中字符流的操做都是在緩衝區進行的,因此在使用字符流操做資源時若想主動將資源刷新到文件中,
  則可使用flush()方法

5.字符流和字節流有什麼區別?

1)字節流和字符流的使用大部分很是類似,字節流是直接操做文件自己的不通過緩衝區,
  但字符流的操做所有是通過緩衝區的,因此若不使用close(),是不會輸出任何內容的,
  同時也可使用flush()來強制刷新緩衝區,以達到不使用close()也可以輸出內容
2)字節流處理的是字符、字符數組和二進制對象
  字符流處理的是字符、字符數組和字符串

6.什麼是Java序列化,如何實現Java序列化?

1)將一個對象表示爲一個字節序列,能夠對序列化的對象進行讀寫操做,
  好比將該序列化對象寫入文件中,再從文件中讀取出來,反序列化該對象
  由於此過程是在JVM中進行的,因此能夠實如今一個平臺序列化的對象,在另外一個徹底不一樣的平臺反序列化該對象
2)在須要序列化的類上實現接口Serialize接口,沒有須要實現的方法,此接口只是標識對象可被序列化,
  而後使用一個輸出流(如:FileOutputStream)來構造一個對象流(如:ObjectOutputStream)對象,再調用對象流對象
  的writeObject(Obj obj)就能夠將參數obj進行輸出

7.BufferedReader屬於哪一種流,它主要是用來作什麼的,它裏面有那些經典的方法?

1)屬於處理流中的緩衝流
2)能夠將讀取的內容存入內存中
3)readLine(),用於讀取一行

8.什麼是節點流,什麼是處理流,它們各有什麼用處,處理流的建立有什麼特徵?

1)節點流直接與數據源相連,進行輸入輸出
2)處理流是在節點流的基礎上進行加工,擴展其功能
3)處理流的建立必須在構造器中傳入節點流的子類

9.流通常需不須要關閉,若是關閉的話用什麼方法,通常要在那個代碼塊裏面關閉比較好,處理流是怎麼關閉的,若是有多個流互相調用傳入是怎麼關閉的?

1)須要關閉,由於IO流比較佔用資源,使用close()方法
2)通常在finally代碼塊裏,由於一般來講無論代碼是否被try-catch,finally都會執行
3)處理流也是使用close()方法關閉流
4)流的關閉順序通常是,先使用後關閉,後使用先關閉,若是是使用處理流依賴節點流,就是先關閉處理流,再關閉節點流
  也能夠只關閉處理流,處理流關閉時會調用節點流的關閉方法

10.InputStream裏的read()返回的是什麼,read(byte[] data)是什麼意思,返回的是什麼值?

1)返回所讀取的字節的int型,範圍-1~255(源碼中用@Range(from=-1,to=255)),
  若未讀取到內容則返回-1
2)將所讀取的字節放入data字節數組中,返回的是讀取到data字節數組的字節個數
PS:read0()源碼中涉及到一個關鍵詞,native,這是用來聲明與底層C語言代碼相關

11.OutputStream裏面的write()是什麼意思,write(byte b[], int off, int len)這個方法裏面的三個參數分別是什麼意思?

1)將指定字節寫入數據源
2)byte b[]是指定寫入數據源的字節數組,字符串可使用方法getBytes()來轉換成字節數組,
  getBytes()中也能夠指定寫入時的字符編碼,默認爲ISO-8859-1
  int off,是指定寫入字節的起始位置
  int len,是指定寫入字節的結束位置,如寫入字節爲"hello world",int off爲1,int len爲5,則寫入的爲"ello",
  即左閉右開

3、參考

https://zhuanlan.zhihu.com/p/...html

https://www.cnblogs.com/huang...程序員

https://blog.csdn.net/qq_3787...面試

4、最後

做爲新人程序員,深知本身與同行間的差距。因此很是歡迎你們在評論區指出文章中的不足之處。MO_or定及時糾正。數據庫

相關文章
相關標籤/搜索