1. 程式人生 > >使用ByteArrayOutputStream解決FileInputStream讀取過程中的亂碼問題

使用ByteArrayOutputStream解決FileInputStream讀取過程中的亂碼問題

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();關閉流無效
	}