[NIO]利用内存映射文件以及普通通道进行文件拷贝效率分析

DC/DC恒压输出控制原理与应用 DC/DC恒压输出控制 阅读详情
//测试代码, 用来验证内存映射文件、使用缓冲及流的文件读写的效率。可见内存映射文件的效率最高。
package com.nio.test;

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

public class MappedFile {

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
	long start ;
	
	start = System.nanoTime();
	FileCopyBuffer("G:\\jdk-6u22-linux-i586.bin", "I:\\云相关2.rar");
	System.out.println((System.nanoTime() - start) / (float) 1000000000);
	start = System.nanoTime();
	FileCopyStream("G:\\btrace-bin.tar.gz", "I:\\云相关2.rar");
	System.out.println((System.nanoTime() - start) / (float) 1000000000);
	 start = System.nanoTime();
	FileCopyMaped("G:\\jdk-6u22-linux-i586.bin", "I:\\云相关2.rar");
	System.out.println((System.nanoTime() - start) / (float) 1000000000);
	
    }

    private static void FileCopyMaped(String source, String target) {

	FileInputStream in;
	FileOutputStream out;
	try {
	    in = new FileInputStream(source);
	    FileChannel inc = in.getChannel();
	    MappedByteBuffer buffer = inc.map(FileChannel.MapMode.READ_ONLY, 0,
		    inc.size());
	    out = new FileOutputStream(target);
	    FileChannel outc = out.getChannel();
	    outc.write(buffer);
	    inc.close();
	    outc.close();

	} catch (FileNotFoundException e) {
	    e.printStackTrace();
	} catch (IOException e) {
	    e.printStackTrace();
	}
    }

    private static void FileCopyBuffer(String source, String target) {

	FileInputStream in;
	FileOutputStream out;
	try {
	    in = new FileInputStream(source);
	    out = new FileOutputStream(target);
	    FileChannel inc = in.getChannel();
	    FileChannel outc = out.getChannel();
	    
	    ByteBuffer buffer = ByteBuffer.allocate(1024);
	    buffer.clear();
	    int tmp = inc.read(buffer);
	    while (tmp > 0) {
		buffer.flip();
		outc.write(buffer);
		buffer.clear();
		tmp = inc.read(buffer);
	    }
	    inc.close();
	    outc.close();

	} catch (FileNotFoundException e) {
	    e.printStackTrace();
	} catch (IOException e) {
	    e.printStackTrace();
	}
    }
    
    private static void FileCopyStream(String source, String target) {

	FileInputStream in;
	FileOutputStream out;
	try {
	    in = new FileInputStream(source);
	    out = new FileOutputStream(target);
	    int tmp = in.read();
	    while (tmp !=-1) {
		out.write(tmp);
		tmp = in.read();
	    }
	    out.flush();
	    in.close();
	    out.close();
	} catch (FileNotFoundException e) {
	    e.printStackTrace();
	} catch (IOException e) {
	    e.printStackTrace();
	}
    }
}

使用Buffer的拷贝文件大小:83761756,读写时间:1.3592848

使用流的拷贝文件大小:655656,读写时间:6.982578

使用内存映射文件拷贝文件大小:83761756,读写时间:1.0513209

可见使用内存映射文件的方式进行读写操作效率要高于Buffer的,而流操作是最耗时的(每次读写都要执行一次IO)。

QT+Halcon实现螺纹检测 工业上要检测螺丝的内外直径、内外牙距、内外角度,现在比较好用的图像处理库,开源的opencv,收费的有halcon。为了实现螺纹检测,和对比螺纹检测拿个库比较好。分别用opencv和halcon实现了螺纹检测,通过对比发现用halcon实现的效果比较。现在用博客把实现过程记录下来: 1、需要检测的螺纹数据如下: 2、为了实现检测螺丝以上数据,螺纹内径、螺纹外径、螺纹外牙距、螺纹... 阅读详情

相关推荐

别再让电池充不满!用CN3791芯片设计太阳能充电电路,这几个调试坑我帮你踩了

本文详细解析了使用CN3791芯片设计太阳能充电电路时的常见调试问题及解决方案。从RCS电阻的选择到MPPT电压偏差的修正,再到线路损耗和温度补偿的优化,提供了全面的避坑指南。通过实测数据和优化方案,帮助工程师提升锂电池充电效率,确保太阳能充电电路的稳定性和可靠性。

weixin_42528191的博客 240

利用NIO实现文件拷贝

利用NIO实现文件拷贝 项目里面可能会有 把某文件从磁盘的这个地方拷贝到磁盘的另外一个地方 实现的方式有很多种,IO,apache的工具类,JDK自带的文件拷贝等等等 为什么我要选择NIO呢?请参照上一篇文章! 我们先用IO也就是原始的方法来实现,也就是所谓的BIO 同步阻塞式IO(不秒懂请参照上一篇文章 ) /** * Created by IntelliJ IDEA. * User: kt * Date: 2021/3/30 15:36 * * @author kt * 利用io实现文件

qq_45368183的博客 1064

S7-1200PLC期末复习题(第七章)

A.0 B.1 C.4 D.-4 A、CV = 0 B、CV = 1 C、CV < 4 D、CV >= 4A、0,0 B、3,0 C、1,1 D、3,1 A、0 B、1 C、先是1,再变为0 D、先是0,再变为1置位输出:常开触点M0.0闭合,Q0.0变为1状态并保存该状态,即使M0.0断开,Q0.0也保持1状态。 复位输出:常开触点M0.1闭合时,Q0.0变为0状态并保持该状态,即使M0.1断开,Q0.0也保持为0状态。 A、1 B、0 C、5 D、10RESET_BF指令需要两个参数,第一个是复位的位数

qq_52251819的博客 4418

Java NIO笔记(六):内存映射文件及文件通道到通道批量传输数据

一、什么是内存映射文件

堆码时刻 6271

VUE3如何使得大屏自适应的几种方法?

16:9。

weixin_42711805的博客 1万+

Neo4j 智能供应链应用源代码简析

本文简析Neo4j智能供应链应用的源代码,让你也可以快速开发自己的供应链应用。

Neo4j 开发者博客 1679

Java-NIO(五):通道(Channel)的数据传输与内存映射文件

通道(Channel)的数据传输(采用非直接缓冲区) 1 @Test 2 public void testChannel() throws IOException { 3 FileInputStream fileInputStream = new FileInputStream("Java NIO.pdf"); 4 FileOutputStr

nn2345的博客 437

CMake、Make、MinGw、Clang、Llvm、GCC、MSVC的区别

除开 GCC (GNU 编译器集合) 以外,MinGW 还包含有一些其他的 GNU 程序开发工具;的缩写,MinGw是windows版本的gcc集合。并不仅是一个 C/C++ 编译器,而是一套。是微软开发的VC运行时库,3、Make和CMake是。

m0_37698164的博客 1万+

Java IO和Java NIO在文件拷贝上的性能差异分析

1.       在JAVA传统的IO系统中,读取磁盘文件数据的过程如下: 以FileInputStream类为例,该类有一个read(byte b[])方法,byte b[]是我们要存储读取 到用户空间的缓冲区。参看read(byte b[])方法的源码,可知,它会在内部再调用readBytes(b, 0, b.length)方法,而且readBytes(b, 0, b.length)方法是...

weixin_34348174的博客 155

AI测试实战:用文心一言5分钟生成登录功能测试用例(附Excel模板)

本文详细介绍了如何利用AI工具(如文心一言)在5分钟内高效生成登录功能测试用例,并提供了可直接应用的Excel模板。通过对比传统手工编写与AI生成的效率差异,展示了AI在软件测试领域的巨大优势,包括减少重复劳动、避免边界条件遗漏和提升格式标准化。文章还包含实战技巧、高级应用方案和行业最佳实践,助力测试人员快速提升工作效率。

weixin_30379531的博客 410

A2B V1.0协议学习笔记(A2B System Specification V1.0)

A2B全称是 Automotive Audio Bus 汽车音频总线,主要是解决传统音频总线线多、线重、成本贵等问题。本文是以A2B V1.0规范为准,现在ADI又推出了A2B V2.0,物理层不兼容,采用了QPSK编码方式,后续有时间再更新。A2B总线的优点:支持1主多从的架构(最多10个子节点)支持50Mbps(具体是49.152 Mbps)的高带宽传输以及

qflook的博客 4426

Java之NIO和零拷贝(Zero Copy)

早就想写一篇关于NIO中的零拷贝的文章,今天逛博客看到一篇写的不错的文章,就转载过来了,相信对零拷贝不太了解的同学看到后会很有收获 本文章转自: https://blog.youkuaiyun.com/cringkong/article/details/80274148 一.Linux操作系统中的零拷贝 1.1先从Linux的普通I/O过程说起 1.2内存映射方式I/O 1.3内核空间内部传输I/O 1.4理...

BestQiang的博客 8727

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

为什么顶尖公司都在用NIO处理大文件?:深入剖析内存映射底层原理

掌握Java处理大文件的NIO内存映射技术,高效解决大文件读写性能瓶颈。适用于日志处理、数据导入导出等场景,通过内存映射降低I/O开销,提升读写速度。原理清晰,代码实用,值得收藏。

CompiGap的博客 625

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Java面试笔记:基础】12.Java有几种文件拷贝方式?哪一种最高效?

文件拷贝方式:Java 提供了多种文件拷贝方式,包括传统 IO、NIO 和标准类库提供的方法。拷贝效率:NIO 的 transferTo/transferFrom 方式通常更高效,但实际效率取决于操作系统和配置。技术细节:理解用户态空间和内核态空间、零拷贝技术、NIO Buffer 的使用和 Direct Buffer 的生命周期管理等技术细节,有助于优化文件拷贝性能。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1709

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java NIO 文件IO-内存映射文件MappedByteBuffer与zerocopy

在传统的文件IO操作中,我们都是调用操作系统提供的底层标准IO系统调用函数read()、write() ,此时调用此函数的进程(在JAVA中即java进程)由当前的用户态切换到内核态,然后OS的内核代码负责将相应的文件数据读取到内核的IO缓冲区,然后再把数据从内核IO缓冲区拷贝到进程的私有地址空间中去,这样便完成了一次IO操作。这么做是为了减少磁盘的IO操作,为了提高性能而考虑的,因为我们的程序访问

Liu Xin's Blog 2589

JAVA NIO之浅谈内存映射文件原理与DirectMemory

JAVA类库中的NIO包相对于IO 包来说有一个新功能是内存映射文件,日常编程中并不是经常用到,但是在处理大文件时是比较理想的提高效率的手段。本文我主要想结合操作系统中(OS)相关方面的知识介绍一下原理。    在传统的文件IO操作中,我们都是调用操作系统提供的底层标准IO系统调用函数  read()、write() ,此时调用此函数的进程(在JAVA中即java进程)由当前的用户态切换到内核态

hao_rh的博客 510

NIO零拷贝的深入分析

深入分析通过Socket进行数据文件传递中的传统IO的弊端以及NIO的零拷贝实现原理,及用户空间和内核空间的切换方式 传统的IO流程 在这个过程中: 数据从磁盘拷贝进内核空间缓冲区 从内核空间缓冲区拷贝到用户空间缓冲区 从用户空间缓冲区拷贝回内核空间缓冲区 在从内核空间缓冲区拷贝到socket的缓冲区 由Socket换取区传递给数据发送引擎发送 第三步的必要性: IO操作涉及...

weixin_30402343的博客 125

java nio 内存映射_JAVA NIO之浅谈内存映射文件原理与DirectMemory

Java类库中的NIO包相对于IO 包来说有一个新功能是内存映射文件,日常编程中并不是经常用到,但是在处理大文件时是比较理想的提高效率的手段。本文我主要想结合操作系统中(OS)相关方面的知识介绍一下原理。在传统的文件IO操作中,我们都是调用操作系统提供的底层标准IO系统调用函数 read()、write() ,此时调用此函数的进程(在JAVA中即java进程)由当前的用户态切换到内核态,然后OS...

weixin_42348394的博客 227

linux零拷贝 nio,NIO零拷贝的深入分析

什么是零拷贝维基上是这么描述零拷贝的:零拷贝描述的是CPU不执行拷贝数据从一个存储区域到另一个存储区域的任务,这通常用于通过网络传输一个文件时以减少CPU周期和内存带宽。零拷贝给我们带来的好处减少甚至完全避免不必要的CPU拷贝,从而让CPU解脱出来去执行其他的任务减少内存带宽的占用通常零拷贝技术还能够减少用户空间和操作系统内核空间之间的上下文切换零拷贝的实现零拷贝实际的实现并没有真正的标准,取决于...

weixin_39671405的博客 231

jvm 堆外内存_Java NIO中的堆外内存、内存映射与Zero Copy

在前公司时参与了一个编码竞赛,虽然只拿到一个中游成绩,但在参赛过程中学习到很多其他人优秀的思考方式,也接受了前辈的指点,尤其是在参赛时的一些知识面拓展对我帮助不小。其中一些平常很少接触到的知识对于之后的工作会有所帮助。题目很简单,大概是这样:在4G内存的机器上实现对大文件内容的按行排序文件每行为小写字母组成的不重复的一段字符串,最长为128字节文件大小有1G/2G/5G/10G/20G多种,很明显...

weixin_39661345的博客 427

Java NIO(二):NIO在处理文件时一个扎心的真相

BIO (InputStream/OutputStream): 阻塞流,性能一般。 NIO (Network - SocketChannel): 非阻塞,支持 Selector 多路复用,适合高并发网络。 NIO (File - FileChannel): 阻塞,但通过 Buffer、Direct Memory 和零拷贝提升了吞吐量。 AIO (AsynchronousFileChannel): 异步非阻塞,基于回调机制,适合超高性能的文件处理(尤其是 Windows 环境)。

欧阳方超的专栏 405

Java NIO(网络io)(二)

一. 内存映射文件 1. MappedByteBuffer java处理大文件,一般用BufferedReader,BufferedInputStream这类带缓冲的IO类,不过,如果文件超大的话,更快的方式是MappedByteBuffer。 MappedByteBuffer是NIO引入的文件内存映射方案,读写性能极高。 MappedByteBuffer将文件直接映射到虚拟内存,如果文件比较大的话,可以分段映射。 2.MappedByteBuffer原理 3.FileChannel提供了m

weixin_45836787的博客 1414

Java NIO详解

本文深入讲解了 Java NIO,一种基于通道和缓冲区的非阻塞 IO 模型,旨在解决传统 BIO 模型在高并发场景下的性能瓶颈。文章详细介绍了 NIO 的核心组件:Buffer、Channel 和 Selector,并对比了 NIO 与 BIO 的区别,阐述了 NIO 在性能和资源利用方面的优势。此外,文章还提供了 NIO 的实际应用案例,并介绍了基于 NIO 的 Reactor 模式,包括单线程、多线程和主从多线程三种模式,分析了它们的优缺点和适用场景。

叉烧钵钵鸡的博客 3102

内存映射文件(Memory-Mapped File)

Java Memory-Mapped File所使用的内存分配在物理内存而不是JVM堆内存,且分配在OS内核。 1: 内存映射文件及其应用 - 实现一个简单的消息队列 / 计算机程序的思维逻辑 在一般的文件读写中,会有两次数据拷贝,一次是从硬盘拷贝到操作系统内核,另一次是从操作系统内核拷贝到用户态的应用程序。而在内存映射文件中,一般情况下,只有一次拷贝,且内存分配在操作系统内核,应用程序...

weixin_34128237的博客 1670
上一篇: [USACO]Runaround Numbers
下一篇: 线程协作测试
newlaide
博客等级 码龄17年 4粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值