本篇文章主要記錄關於IO的基礎知識與面試問題
1)它是一種將數據流從源頭流到目的地。好比文件拷貝,就包括了輸入(複製)輸出(粘貼)流 2)主要包括File、InputStream、OutputStream、Reader、Writer五大類,Serialize接口
1)兩種,字節流,字符流 2)字節流爲:InputStream、OutputStream 3)字符流爲:Reader、Writer
1)若傳輸的資源爲:圖片、視頻、音頻等,按字節排列的資源,字節流相對更好 2)若傳輸的資源爲:字符串、漢字等,按字符排列的資源,字符流相對更好
1)緩衝區就是一塊特殊的內存區域。不少狀況下當程序須要頻繁操做一個資源(如文件或數據庫)性能會很低,因此爲了 提高性能,就能夠將部分資源讀寫到緩衝區上,之後直接今後區域讀寫數據便可,這樣就顯著提高了性能 2)Java中字符流的操做都是在緩衝區進行的,因此在使用字符流操做資源時若想主動將資源刷新到文件中, 則可使用flush()方法
1)字節流和字符流的使用大部分很是類似,字節流是直接操做文件自己的不通過緩衝區, 但字符流的操做所有是通過緩衝區的,因此若不使用close(),是不會輸出任何內容的, 同時也可使用flush()來強制刷新緩衝區,以達到不使用close()也可以輸出內容 2)字節流處理的是字符、字符數組和二進制對象 字符流處理的是字符、字符數組和字符串
1)將一個對象表示爲一個字節序列,能夠對序列化的對象進行讀寫操做, 好比將該序列化對象寫入文件中,再從文件中讀取出來,反序列化該對象 由於此過程是在JVM中進行的,因此能夠實如今一個平臺序列化的對象,在另外一個徹底不一樣的平臺反序列化該對象 2)在須要序列化的類上實現接口Serialize接口,沒有須要實現的方法,此接口只是標識對象可被序列化, 而後使用一個輸出流(如:FileOutputStream)來構造一個對象流(如:ObjectOutputStream)對象,再調用對象流對象 的writeObject(Obj obj)就能夠將參數obj進行輸出
1)屬於處理流中的緩衝流 2)能夠將讀取的內容存入內存中 3)readLine(),用於讀取一行
1)節點流直接與數據源相連,進行輸入輸出 2)處理流是在節點流的基礎上進行加工,擴展其功能 3)處理流的建立必須在構造器中傳入節點流的子類
1)須要關閉,由於IO流比較佔用資源,使用close()方法 2)通常在finally代碼塊裏,由於一般來講無論代碼是否被try-catch,finally都會執行 3)處理流也是使用close()方法關閉流 4)流的關閉順序通常是,先使用後關閉,後使用先關閉,若是是使用處理流依賴節點流,就是先關閉處理流,再關閉節點流 也能夠只關閉處理流,處理流關閉時會調用節點流的關閉方法
1)返回所讀取的字節的int型,範圍-1~255(源碼中用@Range(from=-1,to=255)), 若未讀取到內容則返回-1 2)將所讀取的字節放入data字節數組中,返回的是讀取到data字節數組的字節個數 PS:read0()源碼中涉及到一個關鍵詞,native,這是用來聲明與底層C語言代碼相關
1)將指定字節寫入數據源 2)byte b[]是指定寫入數據源的字節數組,字符串可使用方法getBytes()來轉換成字節數組, getBytes()中也能夠指定寫入時的字符編碼,默認爲ISO-8859-1 int off,是指定寫入字節的起始位置 int len,是指定寫入字節的結束位置,如寫入字節爲"hello world",int off爲1,int len爲5,則寫入的爲"ello", 即左閉右開
https://zhuanlan.zhihu.com/p/...html
https://www.cnblogs.com/huang...程序員
https://blog.csdn.net/qq_3787...面試
做爲新人程序員,深知本身與同行間的差距。因此很是歡迎你們在評論區指出文章中的不足之處。MO_or定及時糾正。數據庫