Java I/O(Input/Output)是 Java 編程語言提供的一種輸入/輸出機制。這種機制為 Java 應用程序提供了一種標準的、流式的方式來讀寫所有類型的數據。Java I/O 可以分為傳統的 I/O 和 NIO(New I/O)。在這篇文章中,我們將探討 Java I/O 和 NIO 的基礎。
Java I/O 的核心是流(Stream),數據可以通過流在程序之間傳輸。Java I/O 包含了各種輸入輸出類,這些類可以用來讀寫文件、Socket、管道和數組等。其中比較基礎的類有 InputStream、OutputStream、Reader 和 Writer。
例如讀取文件內容的代碼如下:
File file = new File("test.txt"); try (FileInputStream fis = new FileInputStream(file)) { byte[] data = new byte[(int) file.length()]; fis.read(data); String content = new String(data, "UTF-8"); System.out.println(content); } catch (IOException e) { e.printStackTrace(); }
上面的代碼使用了 FileInputStream 類來讀取文件 "test.txt" 的內容,并將其輸出到控制臺。FileInputStream 繼承自 InputStream 類,能夠從文件中讀取字節流。
NIO 是 Java 中提供的一種為高速數據訪問而設計的新 I/O API。NIO 的核心是 Channel 和 Buffer。在 NIO 的世界里,所有的數據都是通過 Buffer 對象處理的。任何進入或離開 Channel 的數據都必須經過 Buffer。
使用 NIO API 讀取文件內容的代碼如下:
File file = new File("test.txt"); try (RandomAccessFile raf = new RandomAccessFile(file, "r"); FileChannel channel = raf.getChannel()) { ByteBuffer buffer = ByteBuffer.allocate((int) channel.size()); channel.read(buffer); buffer.flip(); String content = new String(buffer.array(), "UTF-8"); System.out.println(content); } catch (IOException e) { e.printStackTrace(); }
上面的代碼使用了 RandomAccessFile 類來獲取 FileChannel 對象,該對象用于與文件建立通道進行讀寫操作。Buffer.allocate() 方法可以創建一個指定大小的 Buffer。
總的來說,Java I/O 和 NIO 都是 Java 編程中必不可少的 API。I/O 是從 Java 1.0 開始就存在的,而 NIO 是從 Java 1.4 版本開始引入的,提供了更高效、更可伸縮的 I/O 操作方式。入門這兩個 API 對于 Java 開發者來說是很必要的。