1、流的概念
1.一、
程序中全部的數據都是以流的方式進行傳輸或保存的1.2
、程序須要讀取數據的時候要使用輸入流讀取數據,而當程序須要將一些數據保存(寫)到磁盤的時候,就要使用輸出流完成。1.3
、切記:程序是內,文件...是外2、流的超類
2.1
、字節流的超類:InputStream、OutputStream
2.二、
字符流的超類: Reader、Writer
2.三、
用途推薦2.四、
前言:其實前言放在這裏,筆者認爲是不合適的,以前的鋪墊只是方便讀者快讀進入狀態ios
字符流的誕生:字符流按虛擬機的encode處理,也就是經過InputStreamReader,OutputStreamWriter
進行字符集的轉化數組
轉化(注:初學者能夠不看該轉化知識,若是想了解原理,該段是有幫助的):函數
InputStreamReader
:用於將一個字節流中的字節解碼成字符,其構造函數InputStreamReader isr = new InputStreamReader(InputStream in)
的參數是一個InputStream對象 / System.in,用 對象.read(char[] data),的方式獲取內容OutputStreamWriter
:用於將寫入的字符編碼成字節後寫入一個字節流,其構造函數(之一)OutputStreamWriter osw = new OutputStreamWriter(OutputStream out)
是一個OutputStream對象,一般用對象.write(String str)的方式寫到 對象綁定的輸出流上。3、字節流與字符流的區別
3.一、
操做文件時的區別:3.二、
存在形式區別:4、分析與優化
分析:學習
優化:優化
此時,經過緩衝區,先把須要操做的數據暫時放入內存中,之後直接從內存中讀取數據,則能夠避免屢次的IO操做,提升效率。下面是部分代碼:編碼
/*(1)對於視頻、圖片等文件的加緩衝優化*/ byte[] fileToByteArray (String filePath){ File des = new File(filePath); FileInputStream fis = new FileInputStream(des); ByteArrayOutputStream bios = new ByteArrayOutputStream(); byte[] datas = new byte[1024]; //緩衝容器:提升效率` int len = -1; while ((len = fis.read(datas)) != -1){ bios.write(datas, 0, len); //把字節數組datas的內容 寫入到 字節數組輸出流 中--分段寫入 } bios.flush(); //強制將緩衝區中的數據寫入輸出流,並清空緩衝區 return bios.toByteArray(); } /*(2)對於純文本文件的加緩衝優化:*/ //BufferedReader,內部其實維護一個緩衝字符數組 String tempStr = ""; try (FileReader fr = new FileReader("a.txt"); FileWriter fw = new FileWriter("b.txt"); BufferedWriter bw = new BufferedWriter(fw); BufferedReader br = new BufferedReader(fr)){ //包裝: while ((tempStr = br.readLine()) != null){ //將讀取的"一行"字符串寫入文件中 bw.write(tempStr); //寫入下一行的時候,先換行 bw.newLine(); } } catch (IOException e){ e.printStackTrace(); }
附:筆者並無把規範的代碼展現出來,只是把與本文相關的核心代碼展現給了你們你們有興趣能夠自行補充。內容其實很少,加多幾個try,catch語句便可! 但願做者的文章但願能夠被您採納,咱們一塊兒學習,共同進步!