一、字節輸入流——硬盤中數據寫出到內存中供解析使用:
根據文件存儲原理,8位二進制組成爲一個字節,換算後的數值在0-127則查詢ASCII碼錶,其餘則查詢系統默認表,如簡體中文查詢GBK表;java
二、FileInputStream文件字節輸入流:
三、FileInputStream使用實例:
其中,每次調用read方法指針後移一位;最後返回值爲-1,繼續讀一直是-1;linux
當長度即元素數量已知時候(點size() 或者 點length() )使用for循環,有索引的可使用for each 也能夠用普通for循環(初始化表達式; 步進表達式; 布爾表達式),windows
沒有索引的時候只能使用加強for循環及for each;數組
當長度即元素數量未知時候,使用while循環,括號裏是布爾表達式即循環條件即循環結束條件;jvm
若while括號中的條件布爾表達式不用變量接收再判斷的話:
運行結果:優化
其中,while括號中的條件布爾表達式不用變量接收直接進行判斷的話,會少值,由於每次執行FileInputStream方法時候,指針都在後移一位;spa
前者使用變量接收,輸出打印變量,只執行了一次read()方法;3d
後者執行了兩次read()方法;指針
四、InputStream從硬盤寫出數據到內存而後讀取的原理:
其中紅色指針一直在向後移動;對象
windows系統和linux系統的結束標記不同,但經過java虛擬機jvm處理返回到程序裏面都是-1;
五、InputStream一次讀取多個字節:
其中,數組存放讀取的字節,緩衝做用;
數組的值一直在動態變化;
重複操做使用循環優化:
其中,由於不知道 FileInputStream fis 對象的大小(length 或者 size),使用while循環;
運行結果:
除了字符串的值,後面還有不少空格,建立的長度爲1024(kb)的數組,轉換爲字符串時候產生的後面沒有用到空格;
優化:使用String的另一個帶索引截取固定長度的構造方法: