關注我不迷路,叮~數組
IO:Java對數據的操做是經過流的方式,IO流用來處理設備之間的數據傳輸,上傳文件和下載文件,Java用於操做流的對象都在IO包中。緩存
圖示:(主要IO流)
app
InputStream:字節輸入流基類,抽象類是表示字節輸入流的全部類的超類。編輯器
經常使用方法: // 從輸入流中讀取數據的下一個字節 abstract int read() // 從輸入流中讀取必定數量的字節,並將其存儲在緩衝區數組 b中 int read(byte[] b) // 將輸入流中最多 len 個數據字節讀入 byte 數組 int read(byte[] b, int off, int len) // 跳過和丟棄此輸入流中數據的 n個字節 long skip(long n) // 關閉此輸入流並釋放與該流關聯的全部系統資源 void close()
OutputStream:字節輸出流基類,抽象類是表示輸出字節流的全部類的超類。編碼
經常使用方法: // 將 b.length 個字節從指定的 byte 數組寫入此輸出流 void write(byte[] b) // 將指定 byte 數組中從偏移量 off 開始的 len 個字節寫入此輸出流 void write(byte[] b, int off, int len) // 將指定的字節寫入此輸出流 abstract void write(int b) // 關閉此輸出流並釋放與此流有關的全部系統資源 void close() // 刷新此輸出流並強制寫出全部緩衝的輸出字節 void flush()
FileInputStream:字節文件輸入流,從文件系統中的某個文件中得到輸入字節,用於讀取諸如圖像數據之類的原始字節流。spa
構造方法: // 經過打開一個到實際文件的鏈接來建立一個FileInputStream,該文件經過文件系統中的File對象file指定 FileInputStream(File file) // 經過打開一個到實際文件的鏈接來建立一個FileInputStream,該文件經過文件系統中的路徑name指定 FileInputStream(String name) 經常使用方法:覆蓋和重寫了父類的的經常使用方法。
// 讀取f盤下該文件f://hell/test.txt //構造方法1 InputStream inputStream = new FileInputStream(new File("f://hello//test.txt")); int i = 0; //一次讀取一個字節 while ((i = inputStream.read()) != -1) { // System.out.print(i + " ");// 65 66 67 68 //爲何會輸出65 66 67 68?由於字符在底層存儲的時候就是存儲的數值。即字符對應的ASCII碼。 System.out.print((char) i + " ");// A B C D } //關閉IO流 inputStream.close();
// 讀取f盤下該文件f://hell/test.txt //構造方法2 InputStream inputStream2 = new FileInputStream("f://hello/test.txt"); // 字節數組 byte[] b = new byte[2]; int i2 = 0; // 一次讀取一個字節數組 while ((i2 = inputStream2.read(b)) != -1) { System.out.print(new String(b, 0, i2) + " ");// AB CD } //關閉IO流 inputStream2.close();
注: 一次讀取一個字節數組,提升了操做效率,IO流使用完畢必定要關閉。
FileOutputStream:字節文件輸出流是用於將數據寫入到File,從程序中寫入到其餘位置。code
構造方法: // 建立一個向指定File對象表示的文件中寫入數據的文件輸出流 FileOutputStream(File file) // 建立一個向指定File對象表示的文件中寫入數據的文件輸出流 FileOutputStream(File file, boolean append) // 建立一個向具備指定名稱的文件中寫入數據的輸出文件流 FileOutputStream(String name) // 建立一個向具備指定name的文件中寫入數據的輸出文件流 FileOutputStream(String name, boolean append) 經常使用方法:覆蓋和重寫了父類的的經常使用方法。
OutputStream outputStream = new FileOutputStream(new File("test.txt")); // 寫出數據 outputStream.write("ABCD".getBytes()); // 關閉IO流 outputStream.close(); // 內容追加寫入 OutputStream outputStream2 = new FileOutputStream("test.txt", true); // 輸出換行符 outputStream2.write("\r\n".getBytes()); // 輸出追加內容 outputStream2.write("hello".getBytes()); // 關閉IO流 outputStream2.close();
注;輸出的目的地文件不存在,則會自動建立,不指定盤符的話,默認建立在項目目錄下;輸出換行符時必定要寫\r\n不能只寫\n,由於不一樣文本編輯器對換行符的識別存在差別性。
BufferedInputStream:字節緩衝輸入流,提升了讀取效率。視頻
構造方法: // 建立一個 BufferedInputStream並保存其參數,即輸入流in,以便未來使用。 BufferedInputStream(InputStream in) // 建立具備指定緩衝區大小的 BufferedInputStream並保存其參數,即輸入流in以便未來使用 BufferedInputStream(InputStream in, int size)
InputStream in = new FileInputStream("test.txt"); // 字節緩存流 BufferedInputStream bis = new BufferedInputStream(in); byte[] bs = new byte[20]; int len = 0; while ((len = bis.read(bs)) != -1) { System.out.print(new String(bs, 0, len)); // ABCD // hello } // 關閉流 bis.close();
BufferedOutputStream:字節緩衝輸出流,提升了寫出效率。對象
構造方法: // 建立一個新的緩衝輸出流,以將數據寫入指定的底層輸出流 BufferedOutputStream(OutputStream out) // 建立一個新的緩衝輸出流,以將具備指定緩衝區大小的數據寫入指定的底層輸出流 BufferedOutputStream(OutputStream out, int size) 經常使用方法: // 將指定 byte 數組中從偏移量 off 開始的 len 個字節寫入此緩衝的輸出流 void write(byte[] b, int off, int len) // 將指定的字節寫入此緩衝的輸出流 void write(int b) // 刷新此緩衝的輸出流 void flush()
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("test.txt", true)); // 輸出換行符 bos.write("\r\n".getBytes()); // 輸出內容 bos.write("Hello Android".getBytes()); // 刷新此緩衝的輸出流 bos.flush(); // 關閉流 bos.close();
Reader:讀取字符流的抽象類.blog
經常使用方法: // 讀取單個字符 int read() // 將字符讀入數組 int read(char[] cbuf) // 將字符讀入數組的某一部分 abstract int read(char[] cbuf, int off, int len) // 跳過字符 long skip(long n) // 關閉該流並釋放與之關聯的全部資源 abstract void close()
Writer:寫入字符流的抽象類.
經常使用方法: // 寫入字符數組 void write(char[] cbuf) // 寫入字符數組的某一部分 abstract void write(char[] cbuf, int off, int len) // 寫入單個字符 void write(int c) // 寫入字符串 void write(String str) // 寫入字符串的某一部分 void write(String str, int off, int len) // 將指定字符添加到此 writer Writer append(char c) // 將指定字符序列添加到此 writer Writer append(CharSequence csq) // 將指定字符序列的子序列添加到此 writer.Appendable Writer append(CharSequence csq, int start, int end) // 關閉此流,但要先刷新它 abstract void close() // 刷新該流的緩衝 abstract void flush()
InputStreamReader:字節流轉字符流,它使用的字符集能夠由名稱指定或顯式給定,不然將接受平臺默認的字符集。
構造方法: // 建立一個使用默認字符集的 InputStreamReader InputStreamReader(InputStream in) // 建立使用給定字符集的 InputStreamReader InputStreamReader(InputStream in, Charset cs) // 建立使用給定字符集解碼器的 InputStreamReader InputStreamReader(InputStream in, CharsetDecoder dec) // 建立使用指定字符集的 InputStreamReader InputStreamReader(InputStream in, String charsetName) 特有方法: //返回此流使用的字符編碼的名稱 String getEncoding()
//使用默認編碼 InputStreamReader reader = new InputStreamReader(new FileInputStream("test.txt")); int len; while ((len = reader.read()) != -1) { System.out.print((char) len);//愛生活,愛Android } reader.close(); //指定編碼 InputStreamReader reader = new InputStreamReader(new FileInputStream("test.txt"),"utf-8"); int len; while ((len = reader.read()) != -1) { System.out.print((char) len);//????????Android } reader.close();
注:Eclipse默認使用GBK編碼,test.txt文件因此是GBK編碼,當指定utf-8編碼時因此會亂碼。
OutputStreamWriter:字節流轉字符流。
構造方法: // 建立使用默認字符編碼的 OutputStreamWriter OutputStreamWriter(OutputStream out) // 建立使用給定字符集的 OutputStreamWriter OutputStreamWriter(OutputStream out, Charset cs) // 建立使用給定字符集編碼器的 OutputStreamWriter OutputStreamWriter(OutputStream out, CharsetEncoder enc) // 建立使用指定字符集的 OutputStreamWriter OutputStreamWriter(OutputStream out, String charsetName) 特有方法: //返回此流使用的字符編碼的名稱 String getEncoding()
BufferedReader:字符緩衝流,從字符輸入流中讀取文本,緩衝各個字符,從而實現字符、數組和行的高效讀取。
構造方法: // 建立一個使用默認大小輸入緩衝區的緩衝字符輸入流 BufferedReader(Reader in) // 建立一個使用指定大小輸入緩衝區的緩衝字符輸入流 BufferedReader(Reader in, int sz) 特有方法: // 讀取一個文本行 String readLine()
//生成字符緩衝流對象 BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt"))); String str; //一次性讀取一行 while ((str = reader.readLine()) != null) { System.out.println(str);// 愛生活,愛Android } //關閉流 reader.close();
BufferedWriter:字符緩衝流,將文本寫入字符輸出流,緩衝各個字符,從而提供單個字符、數組和字符串的高效寫入。
構造方法: // 建立一個使用默認大小輸出緩衝區的緩衝字符輸出流 BufferedWriter(Writer out) // 建立一個使用給定大小輸出緩衝區的新緩衝字符輸出流 BufferedWriter(Writer out, int sz) 特有方法: // 寫入一個行分隔符 void newLine()
FileReader:InputStreamReader類的直接子類,用來讀取字符文件的便捷類,使用默認字符編碼。 FileWriter:OutputStreamWriter類的直接子類,用來寫入字符文件的便捷類,使用默認字符編碼。
讀取f盤下的一個視頻文件到項目中:文件大小29.5 MB
FileInputStream inputStream = new FileInputStream("f://滑板//HEEL_FLIP.mp4"); FileOutputStream outputStream = new FileOutputStream("HEEL_FLIP.mp4"); int len; // 開始時間 long begin = System.currentTimeMillis(); // 一次讀取一個字節 while ((len = inputStream.read()) != -1) { outputStream.write(len); } // 用時毫秒 System.out.println(System.currentTimeMillis() - begin);// 213195 //關閉流釋放資源 inputStream.close(); outputStream.close();
FileInputStream inputStream = new FileInputStream("f://滑板//HEEL_FLIP.mp4"); FileOutputStream outputStream = new FileOutputStream("HEEL_FLIP.mp4"); int len; byte[] bs = new byte[1024]; // 開始時間 long begin = System.currentTimeMillis(); // 一次讀取一個字節數組 while ((len = inputStream.read(bs)) != -1) { outputStream.write(bs, 0, len); } // 用時毫秒 System.out.println(System.currentTimeMillis() - begin);// 281 inputStream.close(); outputStream.close();
FileInputStream inputStream = new FileInputStream("f://滑板//HEEL_FLIP.mp4"); BufferedInputStream bis = new BufferedInputStream(inputStream); FileOutputStream outputStream = new FileOutputStream("HEEL_FLIP.mp4"); BufferedOutputStream bos = new BufferedOutputStream(outputStream); int len; byte[] bs = new byte[1024]; // 開始時間 long begin = System.currentTimeMillis(); while ((len = bis.read(bs)) != -1) { bos.write(bs, 0, len); } // 用時毫秒 System.out.println(System.currentTimeMillis() - begin);// 78 bis.close(); bos.close();
注:由此能夠看出高效緩衝流讀寫速度是很是快的,建議使用。
關於更多的Java基礎知識的知識點我已整理成一個pdf,這樣,方便你們閱讀和參考, 戳我領取!!!也能夠關注我後續文章的推送喔~