java NIO的基本用法
1、什么是NIO
一种新IO流,可以实现对文件的读写操作,效率比IO流高
-
IO是面向流(Stream)的;NIO是面向通道(Channel)和缓冲区(Buffer)的,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中
-
3、NIO中的Channel的主要实现
-
FileChannel:文件通道
-
DatagramChannel:通过 UDP 读写网络中的数据通道。
-
SocketChannel:通过 TCP 读写网络中的数据
-
ServerSocketChannel:可以监听新进来的 TCP 连接,对每一个新进来的连接都会创建一个 SocketChannel
我们这里主要讲解FileChannel
4、NIO中的关键Buffer实现
NIO中的关键Buffer实现有:ByteBuffer, CharBuffer, DoubleBuffer, FloatBuffer, IntBuffer, LongBuffer, ShortBuffer,分别对应基本数据类型: byte, char, double, float, int, long, short。当然NIO中还有MappedByteBuffer, HeapByteBuffer, DirectByteBuffer等这里先不进行陈述。
5、缓冲区Buffer的基本属性
-
容量 (capacity) :表示 Buffer 最大数据容量,缓冲区容量不能为负,并且创建后不能更改。
-
限制 (limit) :第一个不应该读取或写入的数据的索引,即位于 limit 后的数据不可读写。缓冲区的限制不能为负,并且不能大于其容量。
-
位置 (position):下一个要读取或写入的数据的索引。缓冲区的位置不能为负,并且不能大于其限制
6、FileChannel用法(实现文本复制)
a、方式一(读取文件到缓冲区)
public static void main(String[] args) throws IOException {
//字节输入流
FileInputStream fileInputStream=new FileInputStream(new File("object02/src/a.txt"));
//字节输出流
FileOutputStream fileOutputStream=new FileOutputStream(new File("object02/src/b.txt"));
//获取通道,通过文件对应io流获取对应通道
FileChannel fromFileChannel=fileInputStream.getChannel();
FileChannel toFileChannel=fileOutputStream.getChannel();
//创建缓冲区并分配空间
ByteBuffer byteBuffer=ByteBuffer.allocate(1024);
//读取文件数据到缓冲区
while (fromFileChannel.read(byteBuffer)!=-1){
//设置缓冲区为读模式(看源码)
byteBuffer.flip();
//写数据
toFileChannel.write(byteBuffer);
//清空缓冲区(不清空缓冲区无法进行下一次读取,因为position=capacity,看源码)
byteBuffer.clear();
}
//关闭资源
fileInputStream.close();
fileOutputStream.close();
fromFileChannel.close();
toFileChannel.close();
}
b、方式二(通过channel的映射内存实现)
c、方式三(方式二的简化)
记得快乐
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!