Java中的I/O流(即輸入/輸出流)是Java程序中的一項非常重要的功能。其中有兩種流類型:字節流和字符流。這兩種流類型的目的是為了將二進制和文本數據從文件或其他源中讀取到Java程序中,或將數據從Java程序寫入到目標文件或數據源。然而,這兩種流類型在某些方面確實存在著差別。
字節流是可以讀取和寫入二進制數據的流類型。字節可以被視為是文本字符在內存中的一個原始表示形式。字節流可用于處理從網絡連接、文件、套接字或其他數據源中獲得的二進制數據。使用字節流可以很容易地將數據以其原始格式讀取到Java程序中或將數據寫入到目標文件或數據源中。
FileInputStream fis = null; try { fis = new FileInputStream("file.txt"); int c; while ((c = fis.read()) != -1) { System.out.print((char) c); } } catch (IOException ex) { ex.printStackTrace(); } finally { try { if (fis != null) { fis.close(); } } catch (IOException ex) { ex.printStackTrace(); } }
字符流,又稱為文本流,是用于讀取和寫入Unicode字符數據的流類型。它們通常用于處理文本數據,如讀取文本文件、文本記錄和字符串。在處理文本數據時,使用字符流比使用字節流更方便和高效,因為字符流可以正確地將文本編碼轉換為它們的Unicode值,而字節流則不能。
FileReader fr = null; try { fr = new FileReader("file.txt"); int c; while ((c = fr.read()) != -1) { System.out.print((char) c); } } catch (IOException ex) { ex.printStackTrace(); } finally { try { if (fr != null) { fr.close(); } } catch (IOException ex) { ex.printStackTrace(); } }
總的說來,字節流和字符流各有其優點和適用范圍。字節流最適合用于處理二進制數據,而字符流最適合用于處理文本數據。