色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java nio和io的區(qū)別

林玟書1年前7瀏覽0評論

Java中的I/O(輸入輸出)和NIO(新I/O)是兩種不同的I/O處理方式,但它們的區(qū)別在哪里呢?

Java I/O是一種阻塞的I/O操作,這意味著當(dāng)應(yīng)用程序從文件或網(wǎng)絡(luò)流中讀取數(shù)據(jù)時,該操作將會一直阻塞,直到數(shù)據(jù)可用為止。同樣,當(dāng)應(yīng)用程序向文件或網(wǎng)絡(luò)流中寫入數(shù)據(jù)時,該操作也會阻塞,直到數(shù)據(jù)完全寫入。這種I/O方式需要許多線程來處理I/O,會占用大量系統(tǒng)資源,而且很難進(jìn)行事件驅(qū)動編程。

import java.io.FileInputStream; 
import java.io.InputStream; 
public class ReadFile { 
 public static void main(String[] args) throws Exception{ 
InputStream inputStream = null; 
try{ 
inputStream = new FileInputStream("input.txt"); 
int data = inputStream.read(); 
while(data != -1){ 
System.out.print((char) data); 
data = inputStream.read(); 
} 
}finally{ 
if(inputStream != null){ 
inputStream.close(); 
} 
} 
 } 
}

相比之下,Java NIO使用非阻塞I/O方法。這意味著當(dāng)應(yīng)用程序從文件或網(wǎng)絡(luò)流中讀取數(shù)據(jù)時,該操作不會一直阻塞,而是立即返回。如果沒有數(shù)據(jù)可用,則該操作將返回0或null(取決于操作的具體實現(xiàn))。同樣,當(dāng)應(yīng)用程序?qū)懭霐?shù)據(jù)時,操作也會立即返回,而不會等待寫入操作的完成。

import java.io.RandomAccessFile; 
import java.nio.channels.FileChannel; 
import java.nio.channels.FileLock; 
public class FileLockDemo { 
 public static void main(String[] args) throws Exception { 
RandomAccessFile file = new RandomAccessFile("file", "rw"); 
FileChannel fileChannel = file.getChannel(); 
FileLock fileLock = fileChannel.tryLock(); 
if(fileLock != null) { 
System.out.println("Got the lock."); 
} else { 
System.out.println("Unable to get lock."); 
} 
 } 
}

Java NIO還提供了一種選擇器(Selector)的概念,使得應(yīng)用程序可以輕松地使用單個線程來處理多個通道的 I/O 事件。 Java NIO 的這些特性使得其在高并發(fā)和高吞吐量的情況下表現(xiàn)更加優(yōu)秀。

Java NIO的缺點是它需要更多的代碼來實現(xiàn)。相比之下,Java I/O提供了更簡單的API,它很容易上手。因此,如果需要處理少量的I/O,或者只需要處理低并發(fā)的 I/O,則可以使用Java I/O。