在Java中,流(stream)是一種用于處理輸入輸出(IO)操作的機制。 Java中的流被劃分為兩種:底層流和高層流。它們的區(qū)別在于,底層流表示一個字節(jié)流,并且直接與底層操作系統(tǒng)打交道,而高層流是指字節(jié)流的包裝器,提供了數(shù)據(jù)的高級處理和便捷的API。
底層流包括FileInputStream、FileOutputStream、DataInputStream、DataOutputStream、BufferedInputStream和BufferedOutputStream。底層流可以直接讀寫二進制文件,使用的是字節(jié)流,數(shù)據(jù)是以字節(jié)數(shù)組的形式讀入或寫出到文件中。底層流的缺點是它需要大量的代碼來處理數(shù)據(jù)格式,而且不夠靈活。
高層流包括Reader、Writer、BufferedReader、BufferedWriter、PrintWriter和Scanner等。高層流是底層流的包裝器,負責將字節(jié)轉換為字符,并包含了許多API來處理文本文件。高層流具有很多優(yōu)點,比如可以處理文本格式的數(shù)據(jù),支持自動解析、轉換和格式化數(shù)據(jù),使數(shù)據(jù)處理更加靈活和高級。
// 以下是底層流的示例代碼 import java.io.*; public class Example1 { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("input.txt"); FileOutputStream fos = new FileOutputStream("output.txt"); DataInputStream dis = new DataInputStream(fis); DataOutputStream dos = new DataOutputStream(fos); BufferedInputStream bis = new BufferedInputStream(fis); BufferedOutputStream bos = new BufferedOutputStream(fos); byte[] buffer = new byte[1024]; // 使用底層流讀寫二進制文件 while (dis.read(buffer) != -1) { dos.write(buffer); bos.write(buffer); } // 關閉流 dis.close(); fis.close(); dos.close(); fos.close(); bos.close(); } catch (IOException e) { e.printStackTrace(); } } }
// 以下是高層流的示例代碼 import java.io.*; public class Example2 { public static void main(String[] args) { try { FileReader fr = new FileReader("input.txt"); FileWriter fw = new FileWriter("output.txt"); BufferedReader br = new BufferedReader(fr); BufferedWriter bw = new BufferedWriter(fw); PrintWriter pw = new PrintWriter(fw); Scanner scanner = new Scanner(fr); // 使用高層流讀寫文本文件 String line; while ((line = br.readLine()) != null) { bw.write(line); pw.println(line); } // 關閉流 br.close(); fr.close(); bw.close(); fw.close(); pw.close(); scanner.close(); } catch (IOException e) { e.printStackTrace(); } } }