NIO和阻塞io的读写文件效率差异

Java NIO 通道的读写操作细节 Java NIO自JDK 1.4引入,提供了与传统BIO(Blocking IO)完全不同的IO模型,以通道(Channel)和缓冲区(Buffer)为核心,支持非阻塞IO和基于Selector的事件驱动机制。通道与缓冲区的交互原理阻塞/非阻塞读写的实现差异文件通道(FileChannel)与网络通道(SocketChannel、ServerSocketChannel)的特殊操作Selector在非阻塞网络编程中的核心作用缓冲区状态管理与性能优化策略核心概念。 阅读详情

最近因为准备好好学学Netty,在看nio的东西,据说NIO比io的效率快很多,决定写个小程序试试,下面是代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

import org.apache.log4j.Logger;

public class Test {
	private static final Logger logger = Logger.getLogger(Test.class);
	public static void main(String[] args) throws IOException{
		int count=1000;
		long begin = System.currentTimeMillis();
		for(int i=0;i<=count;i++){
			ioCopy();
		}
		long end = System.currentTimeMillis();
		logger.info("ioCopy()耗时:"+(end-begin)+"毫秒.");
		
		long begin1 = System.currentTimeMillis();
		for(int i=0;i<=count;i++){
			nioCopy();
		}
		long end1 = System.currentTimeMillis();
		logger.info("nioCopy()耗时:"+(end1-begin1)+"毫秒.");
	}
	/**
	 * 传统流式io的方式cofy文件
	 * @throws IOException
	 */
	public static void ioCopy() throws IOException{
		File f = new File("E:\\OnKeyDetector.log");
		File fout = new File("E:\\111.txt");
		if(!f.exists()){
			logger.info("要读取的文件不存在");
		}else{
			if(!fout.exists()){
				fout.createNewFile();
			}

			FileInputStream fis = new FileInputStream(f);
			FileOutputStream fos = new FileOutputStream(fout,true);
			
			int temp = 0;
			while( (temp=fis.read()) != -1){
				fos.write(temp);
			}
			fout.delete();
		}
	}
	/**
	 * nio的方式cofy文件
	 * @throws IOException
	 */
	public static void nioCopy() throws IOException{
		File f = new File("E:\\OnKeyDetector.log");
		File fout = new File("E:\\111.txt");
		if(!f.exists()){
			logger.info("要读取的文件不存在");
		}else{
			if(!fout.exists()){
				fout.createNewFile();
			}

			FileInputStream fis = new FileInputStream(f);
			FileChannel fc = fis.getChannel();
			ByteBuffer bf = ByteBuffer.allocate(1024);
			FileOutputStream fos = new FileOutputStream(fout,true);
			FileChannel fcout = fos.getChannel();
			
			while(fc.read(bf) != -1){
				bf.flip();
				fcout.write(bf);
				bf.clear();
			}
			fout.delete();
		}
	}
}

运行结果如下:

2017-04-12 17:17:53 com.creditease.rgs.test.Test.main(Test.java:21) - [INFO] ioCopy()耗时:179872毫秒.
2017-04-12 17:17:54 com.creditease.rgs.test.Test.main(Test.java:28) - [INFO] nioCopy()耗时:1101毫秒.

由结果看,确实不是一个量级,当然,这里的程序只是很粗糙的对效率做个大概的对比,如果要做到严谨程序还得好好改改,不过由此可以看出NIO和阻塞io的效率差别真的很大,这样就可以放心的去好好学学NIO以及Netty啦。

NIO知识入门可参考:

https://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html

Java文件读写IO/NIO及性能比较详细代码及总结 主要介绍了Java文件读写IO/NIO及性能比较详细代码及总结,具有一定借鉴价值,需要的朋友可以参考下。 立即下载

相关推荐

UniApp实战:从文件下载到本地保存与预览的一站式解决方案

本文深入解析了UniApp开发中文件下载、保存与预览的完整流程,提供了基于uni.downloadFile、uni.saveFile和uni.openDocument API的一站式实战解决方案。文章详细拆解了核心API的使用方法、多平台(App、H5)的兼容性处理、常见坑点(如文件路径、权限、格式支持)以及进阶优化技巧(如进度提示、文件管理),旨在帮助开发者构建健壮、用户体验良好的跨平台文件处理功能。

d3e4f的博客 614

【电脑常用操作记录】C盘中可以删除的文件夹

以下这些文件可以删除: 1、C:\WINDOWS\Temp\文件夹中的所有文件(系统临时文件); 2、C:\WINDOWS\ServicePackFiles(升级sp1或sp2后的备份文件); 3、C:\WINDOWS\Driver Cache\i386\driver.cab压缩文件(驱动程序的备份文件); 4、C:\WINDOWS\SoftwareDistribution\download文件夹...

MarsLee_U的博客 3784

立创开源:基于STM32F407的大疆M30T无人机PSDK机载开发板硬件设计与飞行控制实现

本文详细介绍了基于STM32F407微控制器为大疆M30T无人机设计PSDK机载开发板的完整流程。从关键的E-Port接口电路设计、电源保护,到STM32最小系统搭建,再到通过PSDK实现与无人机的通信及基础飞行控制,提供了从硬件到软件的全栈实战指南,助力开发者快速入门无人机负载开发。

weixin_35649491的博客 401

告诉你C盘里的每个文件夹都是干嘛的,哪个可以删除,哪些不能碰

1.Documents and Settings是什么文件?答案:是系统用户设置文件夹,包括各个用户的文档、收藏夹、上网浏览信息、配置文件等。 ­补:这里面的东西不要随便删除,这保存着所有用户的文档和账户设置,如果删除就会重新启动不能登陆的情况,尤其是里面的default user、all users、administrator和以你当前登陆用户名的文件夹。2.Favorites是什么文件?答案:是收藏夹,存放你喜欢的网址。可以在其中放网址快捷方式和文件夹快捷方式,可以新建类别(文件夹)。 3.Progra

La Priness 1万+

跟着Cell学单细胞转录组分析(五):单细胞转录组marker基因鉴定及细胞群注释

书接上回(跟着Cell学单细胞转录组分析(四):单细胞转录组测序UMAP降维聚类)。完成数据降维和细胞聚类后,最主要的环节和工作就是确定各个细胞群,明确是什么类型的细胞,正群的细胞定群很关键,涉及到整个研究,所以这一步宁愿多费时间,也不要出错。当然,这也不是一蹴而就的,需要反复的确认。 要确定各个群是什么细胞,首先需要了解细胞群的marker基因,因为不同类型的细胞突出 表达的基因也是不同的。这里使用FindAllMarkers鉴定各个细胞群的高表达基因。 DefaultAssay(scedata)

qq_42090739的博客 1万+

华为OD面试八股真题 - 操作系统相关 - 2

华为OD技术面,操作系统相关八股真题提供详细解答,这篇博客主要涉及于进程和线程相关知识点

qq_45776114的博客 965

Dos命令大全【转载】

  打开"运行"对话框(Win+R),输入cmd,打开控制台命令窗口... 也可以通过cmd /c 命令 和 cmd /k 命令的方式来直接运行命令 注:/c表示执行完命令后关闭cmd窗口;/k表示执行完命令后保留cmd窗口 # 控制台命令窗口中一些技巧 复制内容:右键弹出快捷菜单,选择“标记(K)”,然后选中所需复制的内容,然后右键即可 粘贴内容:右键弹出快捷菜单,选择“...

学习 记录 总结 分享 3148

【YOLOv11多模态融合改进】(可见光+红外)涉及像素级融合、特征级融合(中期、中后期、后期)、决策级融合的完整配置步骤以及二次改进方案

在网络输入阶段将多模态数据直接合并,形成统一的特征表示。

Limiiiing的博客 1967

java nio读写文件例子,小文件读写,千万不要用NIO

都知道NIO在读取大文件的时候都比较快。但是在小文件的写入就不是这样了(这个例子源于使用1G的内存如何找到10G大小的文件出现频率最高的数字,后来觉得NIO读写大文件有优势,那么小文件读写也应该比较快吧!)。下面是一个使用NIO来像文件写入String的例子:package nio;import java.io.File;import java.io.FileOutputStream;import...

weixin_39775354的博客 726

【系统移植】 移植主线U-Boot(v2024.01-rc3)到RK3399

[系统移植] 移植主线U-Boot(v2024.01-rc3)到RK3399

Systemcall名屋 1003

【ArcPy】用Python批量处理大规模地理数据的几何校正

在许多GIS应用中,尤其是在大规模地理数据处理时,几何校正(Geometric Correction)是一个至关重要的任务。它确保了不同来源的地理数据能够正确地对齐和匹配,从而为后续分析提供准确的基础。几何校正的常见应用包括遥感影像的地理配准、矢量数据的投影转换等。几何校正通常包括坐标转换、重采样等步骤。以下示例展示了如何使用arcpy的工具进行几何校正。"""实施几何校正:param input_layer: 输入待校正数据层。

陈书予 992

JAVA I/O 、NIO 文件读写性能对比

NIO将文件映射到内存进行读写的性能会比普通的IO读写块!

yh_zeng2的博客 2149

物料分类账-返工工单(自身)差异分摊逻辑

如上图所示,当月入库的全部消耗,而返工消耗的数量为100PCS,所以返工消耗占总消耗的比例为100pcs/(205pcs+100pcs)=0.327868852。备注:红色箭头的物料号为产品自己本身所产生的价差,就是返工工单所承担的差异,而我们要计算的就是这个值,所以计算价差不会包括此项。价差合计就是不包括初始分摊的价差9153.7,剩下的价差合计就是返工工单自身所承担的差异4465.21。每一次返工工单所承担的差异都会按照价差*承担比例去计算承担的差异,知道承担完所有差异。

Yeol827的博客 2484

缓冲流按行读写HDFS文件

说到读写文件,不得不提效率很高的NIO 那么先回顾下NIO读写文件的基本操作 直接上java代码 public void nioTest() { String path = "D:\\\\BaiduYunDownload\\\\access_2013_05_30.log"; File file = new File(path); FileI...

yywdys的博客 1820

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

JAVA中IO和NIO的详解分析,FileChannel

用一个例子来阐释: 一辆客车上有10个乘客,他们的目的地各不相同,当没有售票员的时候,司机就需要不断的询问每一站是否有乘客需要下车,需要则停下,不需要则继续开车,这种就是阻塞的方式。 当有售票员的时候,每个乘客都将目的地告诉售票员,然后司机和售票员交流,当一个目的地到了的时候,售票员会通知大家,相应的乘客则下车。 这里我们把司机当做CPU,把乘客当做线程: 那么阻塞方式中:CPU需要不断的

三也_攻城狮 2560

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

JAVA——比较难和底层的面试题 - NIO是什么?适用于何种场景?

基础概念 1、阻塞与非阻塞 阻塞与非阻塞是描述进程在访问某个资源时,数据是否准备就绪的的一种处理方式。当数据没有准备就绪时: 阻塞:线程持续等待资源中数据准备完成,直到返回响应结果。 非阻塞:线程直接返回结果,不会持续等待资源准备数据结束后才响应结果。 2、同步与异步 同步与异步是指访问数据的机制,同步一般指主动请求并等待IO操作完成的方式。 异步则指主动请求数据后便可以继续处理其它任务,随后等待IO操作完毕的通知。 3、传统BIO模型 传统BIO是一种同步的阻塞IO,IO在进行读写时,该线程

崔向阳@李晓的博客 546

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

BIO、NIO和AIO的区别、三种IO的原理与用法

目录 IO BIO NIO AIO 区别及联系 各自适用场景 使用方式 IO 什么是IO? 它是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口。它对于任何计算机系统都非常关键,因而所有 I/O 的主体实际上是内置在操作系统中的。单独的程序一般是让系统为它们完成大部分的工作。 在 Java 编程中,直到最近一直使用 流 的方式完成 I/O。所有 I/O 都被视...

分享 4万+

Java NIO(非阻塞读写)和BIO(阻塞读写)

一个线程可以处理成千上万的客户端连接,底层调用的3个epoll函数,通过事件响应机制(监听机制)实现事件的轮询。epoll实现事件的监听机制,有事件收发就处理,没有就会堵塞进行监听。

yitang的博客 843

NIO的基本介绍

一、什么是NIO Java NIO全称java non-blocking IO, 是指JDK提供的新API。从JDK1.4开始,Java提供了一系列改进的输入/输出的新特性,被统称为NIO(即New IO),是同步非阻塞的 NIO有三大核心部分: Channel(通道), Buffer(缓冲区),Selector(选择器) NIO是面向缓冲区,或者面向块编程的。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动,这就增加了处理过程中的灵活性,使用它可以提供非阻塞式的高伸缩性网络。

莫失莫忘的博客 1万+

Netty指南之IO和NIO的介绍(一)

在学习 Netty 框架之前,我们需要先理解 Java 的 IO 和 NIO 模型。这两种模型在网络编程中扮演着重要角色,而 Netty 则是基于 NIO 模型构建的高性能网络应用框架。本文将详细介绍 IO 和 NIO 的概念、特点以及它们之间的区别,为后续学习 Netty 打下坚实基础。

baidu_27137821的博客 1417

Java IO模型之BIO和NIO分析

根据不同情况选择合适的IO模型

771

java NIO /IO 非阻塞IO 和IO的区别及代码示例

NIO与IO最大的区别之处是: (1)处理数据的方式不同,IO是以流的方式来处理数据的,每次操作只处理一个字节,因此处理的效率比较低;而NIO是以块的方式来处理数据的,每次操作都是以块为单位处理的,因此处理的效率比IO高很多。 (2)NIO把大多数消耗时间的IO操作交给操作系统来完成,因此性能相对IO有很大的提升。 (3)在NIO中所有的数据处理都是以buffer进行的,当写入数据的时候,首

what is java的专栏 1373

深入理解IO模型:阻塞IO、非阻塞IO与IO多路复用

阻塞IO(Blocking I/O),顾名思义,是指在进行IO操作时,如果数据尚未准备好,发起IO请求的线程会被阻塞,直到数据准备完成并拷贝到用户空间。在BIO模型中,通常采用“一个连接一个线程”的处理方式。非阻塞IO(Non-blocking I/O)是指在进行IO操作时,如果数据尚未准备好,IO调用会立即返回,不会阻塞当前线程。线程可以继续执行其他任务,并通过轮询机制(或Selector通知)判断数据是否准备就绪。在NIO模型中,通常采用“一个线程处理多个连接”的方式。

weixin_56018532的博客 1575

Java NIO和传统的IO的区别

Java NIO和IO的区别。

终生学习践行者 1138

Java NIO详解

JAVA NIO 简介 NIO与IO的对比

代码充实生活的博客 1万+

IO 与 NIO 的区别:Java 输入输出的演进与核心差异

维度IONIO设计目标简化基础操作支持高并发和非阻塞处理资源开销高(每连接一线程)低(单线程多连接)学习曲线简单复杂适用领域传统文件操作、低并发网络高并发网络服务、大数据传输选择建议传统 IO:优先用于简单的文件操作或低并发场景。NIO:用于高并发网络服务或需要非阻塞处理的场景。NIO.2(AIO):需要异步处理时选择(如大文件异步读写)。通过理解 IO 与 NIO 的核心差异,开发者可以更高效地选择适合的工具,构建高性能的 Java 应用。

SOS5418818845的博客 1190
上一篇: Netty实现简单网络通信
下一篇: 高可用架构学习笔记--1
R先森
博客等级 码龄12年 193粉丝 63原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值