使用ByteArrayOutputStream解決FileInputStream讀取過程中的亂碼問題
阿新 • • 發佈:2019-01-05
public static void main(String[] args) throws IOException { // 1.read(byte[] b);是位元組輸入流中的方法,建立FileInputStream,關聯a.txt FileInputStream fis = new FileInputStream("a.txt"); // 2.建立記憶體輸出流,將讀到的資料寫到記憶體輸出流中, //ByteArrayOutputStream: //此類實現了一個輸出流,其中的資料被寫入一個 byte 陣列。緩衝區會隨著資料的不斷寫入而自動增長。可使用 toByteArray() 和 toString() 獲取資料。 //關閉 ByteArrayOutputStream 無效。此類中的方法在關閉此流後仍可被呼叫,而不會產生任何 IOException。 ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 3.建立位元組陣列,長度為5 byte[] arr = new byte[5];// 這裡 如果沒ByteArrayOutputStream 就有可能會產生亂碼 int len = -1; while ((len = fis.read(arr)) != -1) { baos.write(arr, 0, len);// 寫到記憶體陣列中去 // 沒用ByteArrayOutputStream的情況將位元組陣列轉換成字串輸出,出現亂碼 // System.out.println(new String(arr, 0, len)); // 你好? // 愫? } // 4.將記憶體輸出流的資料全部轉換為字串列印 System.out.println(baos.toString());// 底層會預設呼叫toString()方法 //輸出結果:你好你好 // 5.關閉輸入流 fis.close(); //baos.close();關閉流無效 }