Java提供了IO和NIO兩種不同的輸入輸出方式。
IO是傳統的阻塞式輸入輸出方法。阻塞式輸入輸出指在執行輸入輸出操作的過程中,如果沒有數據可讀取或沒有空間可寫入,則線程會一直等待,直到數據到來或有空間可以寫入。IO會一直在等待狀態下運行,此時線程被阻塞,無法執行其他任務。因此,IO面對高并發、大規模數據處理時常會出現性能瓶頸。
InputStream input = new FileInputStream("src/file.txt");
OutputStream output = new FileOutputStream("src/file-copy.txt");
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
NIO則是非阻塞式輸入輸出方式,采用事件驅動方式實現讀寫操作。非阻塞式輸入輸出指在執行輸入輸出操作的過程中,如果沒有數據可讀取或沒有空間可寫入,則該線程會立即返回,處理其他任務。在數據到來或者有空間可寫入時,該線程才會繼續運行讀寫操作。因此,NIO在高并發、大規模數據處理時表現更具優勢。
RandomAccessFile raf = new RandomAccessFile("src/file.txt", "rw");
FileChannel channel = raf.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
while (channel.read(buffer) >0) {
buffer.flip();
channel.write(buffer);
buffer.clear();
}
總體而言,NIO擁有更高的處理速度和更好的可擴展性,但是需要更多的代碼來實現相同的功能,同時也需要對事件機制的理解,使用更復雜。
上一篇jquery3d地圖插件
下一篇vue打開靜態頁面