NIO
传统IO基于字节流或字符流进行文件读写,以及使用Socket和ServerSocket进行网络传输。
NIO使用通道(Channel)和缓冲区(Buffer)进行文件操作,以及使用SocketChannel和ServerSocketChannel进行网络传输。
传统IO采用阻塞式模型,对于每个连接,都需要创建一个独立的线程来处理读写操作,而在读写的这个过程中是无法执行其他任务。这会导致大量县城的创建和销毁,以及上下文切换,降低了系统性能。
NIO使用非阻塞模型,允许线程在IO执行时执行其他任务。这种模式通过使用选择器(Selector)来监控多个通道(Channel)上的IO事件,实现了更高的性能和可伸缩性。
JDK1.4中,java.nio.*包中引入新的I/O库,其目的是提高速度。实际上旧的IO包已经使用NIO重新实现过。
// 使用传统的 I/O 方法传输文件
private long transferFile(File source, File des) throws IOException {
long startTime = System.currentTimeMillis();
if (!des.exists())
des.createNewFile();
// 创建输入输出流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(source));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(des));
// 使用数组传输数据
byte[] bytes = new byte[1024 * 1024];
int len;
while ((len = bis.read(bytes)) != -1) {
bos.write(bytes, 0, len);
}
long endTime = System.currentTimeMillis();
return endTime - startTime;
}最后更新于
这有帮助吗?