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