字節輸入流:io包中的InputStream爲全部字節輸入流的父類。
程序員
Int read();
讀入一個字節(每次一個);
數組
可先使用new byte[]=數組,調用read(byte[] b)
網絡
read (byte[])
返回值能夠表示有效數;read (byte[])返回值爲-1表示結束。
dom
字節輸出流:io包中的OutputStream位全部字節輸入流的父類。
編碼
Write
和輸入流中的read相對應。
線程
在流中close()方法由程序員控制。由於輸入輸出流已經超越了VM的邊界,因此有時可能沒法回收資源。
指針
原則:凡是跨出虛擬機邊界的資源都要求程序員本身關閉,不要期望垃圾回收。
code
以Stream結尾的類都是字節流。
對象
若是構造FileOutputStream的同時磁盤會創建一個文件。若是建立的文件與磁盤上已有的文件名重名,就會發生覆蓋。
ip
用FileOutputStream中的boolean,則視,添加狀況,將數據覆蓋重名文件仍是將輸入內容放在文件的後面。(編寫程序驗證)
DataOutputStream:
輸入數據的類型。
由於每中數據類型的不一樣,因此可能會輸出錯誤。
全部對於:DataOutputStream
DataInputStream
二者的輸入順序必須一致。
過濾流:
bufferedOutputStream
bufferedInputStream
用於給節點流增長一個緩衝的功能。
在VM的內部創建一個緩衝區,數據先寫入緩衝區,等到緩衝區的數據滿了以後再一次性寫出,效率很高。
使用帶緩衝區的輸入輸出流的速度會大幅提升,緩衝區越大,效率越高。(這是典型的犧牲空間換時間)
切記:使用帶緩衝區的流,若是數據數據輸入完畢,使用flush方法將緩衝區中的內容一次性寫入到外部數據源。用close()也能夠達到相同的效果,由於每次close都會使用flush。必定要注意關閉外部的過濾流。
(非重點)管道流:也是一種節點流,用於給兩個線程交換數據。
PipedOutputStream
PipedInputStream
輸出流:connect(輸入流)
RondomAccessFile類容許隨機訪問文件
GetFilepoint()能夠知道文件中的指針位置,使用seek()定位。
Mode(「r」:隨機讀;」w」:隨機寫;」rw」:隨機讀寫)
練習:寫一個類A,JAVA A file1 file2
file1要求是系統中已經存在的文件。File2是尚未存在的文件。
執行完這個命令,那麼file2就是file1中的內容。
字符流:reader\write只能輸純文本文件。
FileReader類:字符文件的輸出
字節流與字符流的區別:
字節流的字符編碼:
字符編碼把字符轉換成數字存儲到計算機中,按ASCii將字母映射爲整數。
把數字從計算機轉換成相應的字符的過程稱爲解碼。
編碼方式的分類:
ASCII(數字、英文):1個字符佔一個字節(全部的編碼集都兼容ASCII)
ISO8859-1(歐洲):1個字符佔一個字節
GB-2312/GBK:1個字符佔兩個字節
Unicode: 1個字符佔兩個字節(網絡傳輸速度慢)
UTF-8:變長字節,對於英文一個字節,對於漢字兩個或三個字節。
原則:保證編解碼方式的統一,才能不至於出現錯誤。
Io包的InputStreamread稱爲從字節流到字符流的橋轉換類。這個類能夠設定字符轉換方式。
OutputStreamred:字符到字節
Bufferread有readline()使得字符輸入更加方便。
在I/O流中,全部輸入方法都是阻塞方法。
Bufferwrite給輸出字符加緩衝,由於它的方法不多,因此使用父類printwrite,它可使用字節流對象,並且方法不少。
練習:作一個記事本
swing/JfileChoose: getSelect file()
InputStreeamReader:把字節變爲字符
JAVA中對字符串長無限制 bufferedReader(ir)