java nio 性能_java – IO和NIO的性能差异和例子

博主分享了自己作为Java NIO新手的体验,通过编写简单程序对比了Java NIO和IO在文件复制及搜索单词操作上的性能。尽管了解到NIO通常更快,但在博主的测试中并未观察到显著差异。文章指出,NIO的优势在于能用更少的线程管理多个通道,适合高并发和大量连接的场景,如聊天服务器或P2P网络。而标准IO可能更适合一次性发送大量数据的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我是Java NIO的新手,没有动手.关于Java NIO我知道它比java.IO快.

所以,只是试一试,我想为编写简单的程序

“将一个文件的内容复制到另一个文件”.

“从大文件中搜索一个单词”.

同时使用java.io和java.nio包.

另外,我分别在操作开始和结束之前和之后打印时间.

我没有发现任何差异,因为NIO更快.我可能会走错方向.

任何人都可以引导我通过我可以通过示例正确看到差异的场景吗?

编辑:

我很惊讶地知道这个问题会得到反对票.

我已经提到我是NIO的新手并指导我,如果我走向错误的方向.

我没有发布一个程序,因为它是非常基本的读写操作…请参阅下面我用来测试的程序….

使用IO

public static void copyFile(File in, File out) throws Exception {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

Date now = new Date();

String strDate = sdf.format(now);

System.out.println("Before Read :"+strDate);

FileInputStream fis = new FileInputStream(in);

FileOutputStream fos = new FileOutputStream(out);

try {

byte[] buf = new byte[1024];

int i = 0;

while ((i = fis.read(buf)) != -1) {

fos.write(buf, 0, i);

}

}

catch (Exception e) {

throw e;

}

finally {

if (fis != null) fis.close();

if (fos != null) fos.close();

}

Date now1 = new Date();

String strDate1 = sdf.format(now1);

System.out.println("After Read :"+strDate1);

}

使用NIO

public static void copyFile(File in, File out)

throws IOException

{

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

Date now = new Date();

String strDate = sdf.format(now);

System.out.println("Before Read :"+strDate);

FileChannel inChannel = new

FileInputStream(in).getChannel();

FileChannel outChannel = new

FileOutputStream(out).getChannel();

try {

inChannel.transferTo(0, inChannel.size(),

outChannel);

}

catch (IOException e) {

throw e;

}

finally {

if (inChannel != null) inChannel.close();

if (outChannel != null) outChannel.close();

}

Date now1 = new Date();

String strDate1 = sdf.format(now1);

System.out.println("After Read :"+strDate1);

}

我从一个文件复制到另一个文件的文件大约是20 MB.

解决方法:

NIO允许您仅使用一个(或更少)线程来管理多个通道,但成本是解析数据可能比使用标准IO从阻塞流读取数据时更复杂一些.

如果您需要同时管理数千个打开的连接,每个只发送一些数据,例如聊天服务器,在NIO中实现服务器可能是一个优势.同样,如果您需要与其他计算机保持大量打开的连接,例如在P2P网络中,使用单个线程来管理所有出站连接可能是一个优势.

如果您拥有较少带宽的连接,一次发送大量数据,则应该选择标准IO服务器实现.

标签:java,io,java-ee,nio

来源: https://codeday.me/bug/20190725/1534800.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值