Java NIO小结 (一)

本文介绍了Java NIO(New IO)的关键概念及其相对于传统IO的优势。深入探讨了Buffer、Charset、Channel和Selector等核心组件的功能及应用场景,并通过示例展示了如何使用NIO进行高效的文件读写。

    自JDK1.4后,Java推出了New/IO(java.nio.*)。在JDK1.4之前,原IO(java.io.*)处理只能是stream的方式 逐个字节逐个字节读取或者写入。流处理方式性能低。而New/IO处理数据时以块为单位,系统的IO开销小,但IO性能高。



New/IO的4个核心概念

Buffer 处理IO时,数据的载体

Charset 把unicode字符进行编码成字节码或者把字节码反编成unicode字符

Channel 连接着能进行IO操作的实体,比如一个Channel可以连接一个输入流,也可以连接一个输出流,还可以连接一个输入流和一个输入流,根据channel上连接的具体的流,可以进行输入或输出操作。

SelectorSelectionKey 与Selectable Channel一起,定义了多路复用和Non-Blocking IO操作能力。


Blocking IO和Non-Blocking IO

阻塞IO模式下,任何IO操作会阻塞Channel直到这个IO操作完成后,方可在这个通道上进行其它IO操作。非阻塞模式下,一个IO操作调用时,通道不会被阻塞,即使这个IO操作只传输了少量数据甚至完全没有传输数据。非阻塞模式最适用于多路复用IO编程,比如服务器端socket编程。

 

在JDK1.4中,传统的IO与New/IO已经有很好的集成,在传统的io包中,可以使用Channel,但是要根据具体的输入和输出流来决定。比如下 面的代码先定义一个文件输入流,通过文件输入流的FileChannel读取文件的头512个字节到缓存中,然后使用utf-8编码器把缓存中的内容反编 码成一个utf-8字符串。

 

Charset utf8 = Charset.forName("utf-8");
ByteBuffer buffer = ByteBuffer.allocate(512);
FileInputStream fis = new FileInputStream("a.txt");
FileChannel fileChannel = fis.getChannel();
fileChannel.read(buffer);
buffer.flip();
String content = utf8.decode(buffer);

 

反之,用FileChannel写入文件也是相当的方便,和读取类似。FileChannel写入的方式依赖于输入流的打开方式。下面的代码以 Append方式打开一个文件输出流,用这个流的FileChannel写入编码后的“hello java new IO"字符串。

 

FileOutputStream fos = new FileOutputStream("a.txt", true);
FileChannel fileChannel = fos.getChannel();		 
fileChannel.write(utf8.encode("hello java new IO"));

 

使用Channel的优点在于channel是可以同时输入输出的,而不要像传统的io那样打开一个输入流,打开一个输出流,在读/写时,这两个流总是要配对使用,下面的代码展示如何用一个FileChannel做输入和输出两种IO操作。

Charset utf8 = Charset.forName("utf-8");
//以读写方式随机存储文件
RandomAccessFile raf = new RandomAccessFile("1.txt", "rws");
FileChannel fc = raf.getChannel();

//写入hello file channel到文件中
fc.write(utf8.encode("hello file channel"));

//分配10个字节缓存
ByteBuffer buff = ByteBuffer.allocate(10);

//从文件起始位置开始读取10个字节,并输出
fc.read(buff, 0);
buff.flip();
System.out.println(utf8.decode(buff)); // 输出hello file
fc.close();
raf.close();

 

 

 

[原创内容,版权所有,如有转载,请注明出处,如有错误之处,请指出,不胜感激]

【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值