Java IO(Input/Output 輸入/輸出)是在Java標準庫中提供的一組API,用于讀寫數據流。它提供了許多類來幫助程序員操作文件、流和其他輸入輸出資源。但是,Java IO 在處理大量數據時,在性能和可擴展性方面存在一些局限性。
Java NIO(New Input/Output 新輸入/輸出)是Java標準庫中的另一組API,也用于讀寫數據流。它可以與Java IO同時使用,但是它提供了更高效、更可擴展和更具交互性的非阻塞輸入輸出操作。Java NIO 通過一組基于緩沖區、通道、選擇器等基本組件構成。
/** * 讀取文件 */ public static void readFile(String fileName) throws IOException { RandomAccessFile file = new RandomAccessFile(fileName, "rw"); FileChannel channel = file.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(1024); while (channel.read(buffer) >0) { buffer.flip(); while (buffer.hasRemaining()) { System.out.print((char) buffer.get()); } buffer.clear(); } channel.close(); file.close(); } /** * 向文件寫入內容 */ public static void writeFile(String fileName, String content) throws IOException { RandomAccessFile file = new RandomAccessFile(fileName, "rw"); FileChannel channel = file.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(1024); buffer.put(content.getBytes()); buffer.flip(); channel.write(buffer); channel.close(); file.close(); }
Java IO 是面向流的輸入輸出,它不支持同時進行讀取和寫入操作,也不能非阻塞地讀取數據。而 Java NIO 提供了更高效的渠道通訊,可以同時讀取數據并管理緩沖區,支持非阻塞模式,但其使用也相對更復雜。
在處理大量文件操作和高并發讀寫操作時,Java NIO 由于采用了更高效和可擴展的模型,性能比 Java IO 更好。尤其是在網絡編程中,Java NIO 可以極大地提高網絡通信效率,在處理消息隊列、大數據流傳輸、分布式任務管理等方向擁有廣泛的應用。