在 Java 編程中,數據的讀取和寫入是非常常見的操作。在處理數據時,Java 提供了許多流(Stream)的類,其中 DataInputStream 和 DataOutputStream 類用于讀取和寫入基本數據類型。而 BufferedInputStream 和 BufferedOutputStream 類則是用于讀取和寫入字節流的類。
首先,我們來看一下 DataInputStream 和 DataOutputStream 類。對于文件和網絡數據傳輸,基本數據類型在存儲和傳輸時需要進行轉換,DataInputStream 和 DataOutputStream 類用于簡化這個過程。例如,我們可以使用 DataInputStream 來讀取一個文件:
try (DataInputStream dis = new DataInputStream(new FileInputStream("data.txt"))) { int num = dis.readInt(); double price = dis.readDouble(); String name = dis.readUTF(); System.out.println("num: " + num + " price: " + price + " name: " + name); } catch (IOException e) { e.printStackTrace(); }
代碼中,我們首先使用 FileInputStream 類創建一個文件輸入流,然后將其傳遞給 DataInputStream,通過它來讀取文件中的數據。讀取數據時,我們可以直接使用 readInt,readDouble 和 readUTF 方法,相對于自己手動讀取并轉換數據類型,這樣更加簡單易用。
接下來,讓我們看一下 BufferedInputStream 和 BufferedOutputStream 類。這兩個類的作用是緩存 I/O 操作,減少對底層系統的頻繁訪問,提升程序的性能。例如,我們可以使用 BufferedInputStream 來讀取一個文件:
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("data.txt"))) { byte[] buffer = new byte[1024]; int len; while ((len = bis.read(buffer)) != -1) { System.out.println(new String(buffer, 0, len)); } } catch (IOException e) { e.printStackTrace(); }
代碼中,我們首先創建了一個 BufferedInputStream,并將其傳遞給 FileInputStream,來讀取文件。之后,我們使用 read 方法讀取數據,并傳遞了一個 byte 數組作為緩沖區,這樣可以減少系統 I/O 操作的次數。當讀取到文件結尾時,read 方法返回 -1,此時可以退出循環。
總的來說,DataInputStream 和 DataOutputStream 類用于讀取和寫入基本數據類型,而 BufferedInputStream 和 BufferedOutputStream 類則是用于緩存 I/O 操作的類。在實際應用中,我們可以根據不同的需求來選擇適合的類,以提升程序的效率。