Fork me on GitHub

java基于NIO的分散读取文件,然后统一聚合后写入文件

分散读取:对于一个文件,可以分散的读取数据,可以快速的读取,好比多个线程在分段同时读取;

聚合写入:为了提高效率,一般读取到的数据都是分散的,要快速写入,就需要把分散的数据聚集在一起,然后一块写入到文件;

具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
       //首先创建一个随机访问文件
RandomAccessFile raf= new RandomAccessFile("test.txt", "rw");
//根据随机获取通道
FileChannel channel = raf.getChannel();
//分配指定大小指定缓冲区
ByteBuffer buf1=ByteBuffer.allocateDirect(200);
ByteBuffer buf2=ByteBuffer.allocateDirect(1024);
// 分散读取
ByteBuffer[] bufs={buf1,buf2};
channel.read(bufs);//采用通道分散读取数据
for (ByteBuffer byteBuffer : bufs) {
    // 切换成读模式
    byteBuffer.flip();
}
System.out.println(new String(bufs[0].array(),0,bufs[0].limit()));
System.out.println("-------------------------------------------------");
System.out.println(new String(bufs[1].array(),1,bufs[1].limit()));
System.out.println("------聚集写入---------");
        //创建一个随机写入文件
RandomAccessFile raf2= new RandomAccessFile("test2.txt", "rw");
//获取写入通道
FileChannel channel2 = raf2.getChannel();
channel2.write(bufs);//采用通道写入数据
raf2.close();//关闭
raf.close();//关闭

  


  

posted @   黄高林  阅读(528)  评论(0编辑  收藏  举报
编辑推荐:
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
点击右上角即可分享
微信分享提示