Java中NIO和BIO的区别?代码举例
?
BIO(Blocking IO)是传统的IO模型,它是阻塞式的模式。当一个线程调用read()/write()方法时,该线程会被阻塞直到有数据可读/写。
NIO(Non-blocking IO)是新出的IO模型,它是非阻塞式的模式。当一个线程调用read()/write()方法时,如果数据还未准备好就会立即返回。
代码举例:
BIO:
import java.io.*;
public class BIODemo {
public static void main(String[] args) throws Exception {
// 声明一个字节流对象
InputStream in = null;
try {
// 定义文件名及文件对应的字节流对象
in = new FileInputStream("test.txt");
// 声明一个字节数组,大小为1024字节,即1KB大小
byte[] b = new byte[1024];
// 读取刚才声明的字节流中内容,并放入刚才声明的字节数组中,read方法将返回读取到的字节量大小 int len = in.read(b);
// 打印出从0位开始,读取len个字节量大小的内容 System.out.println("内容:"+new String(b, 0 ,len));
} catch (Exception e) { e.printStackTrace(); } finally{ if (in != null){ in.close(); } } } } NIO: import java.io.*; import java.nio.*; import java.nio.channels.*; public class NIODemo { public static void main(String[] args) throws Exception { FileInputStream fin=new FileInputStream("test1"); FileChannel fcin=fin.getChannel(); ByteBuffer buff=ByteBuffer .allocateDirect (1024); while(true){ buff .clear (); int r=fcin .read (buff ); if (r==-1 ){ break ; } buff .flip (); while (buff .hasRemaining ()){ System .out .print (( char )buff .get ()); }} fin .close (); }}
AI智能问答网免责声明:
以上内容除特别注明外均来源于网友提问、ChatGPT回答,权益归原著者所有,本站仅作效果演示和欣赏之用;
若以上展示有冒犯或侵害到您,敬请联系我们进行删除处理,谢谢!