浅谈Java几种文件读取方式耗时

标题:浅谈Java几种文件读取方式耗时

正文:文件读取是Java程序中常见的操作,经常会涉及到从磁盘读取文件。文件读取操作的耗时对程序的影响非常大,因此有必要深入了解Java中几种文件读取方式的优劣性。

传统IO流的文件读取方式

传统的IO流文件读取方式使用FileInputStream和BufferedInputStream来读取文件,主要原理是将文件内容读取到内存中,适用于小文件的读取操作。该方式的优点是编写简单、易于维护,缺点是对于超大文件的读取操作会导致内存溢出,读取性能相对低下。

以下是代码示例:

long start = System.currentTimeMillis();
FileInputStream fis = new FileInputStream("file.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
int size = bis.available();
byte[] buffer = new byte[size];
bis.read(buffer);
bis.close();
fis.close();
long end = System.currentTimeMillis();
System.out.println("传统IO流读取耗时:" + (end - start) + "ms");

NIO文件读取方式

Java的NIO(New Input/Output)包提供了一种IO模型,它可以实现非阻塞的高效IO操作。NIO文件读取方式的实现主要依靠Channel和Buffer两个核心组件,其读取策略是从磁盘中一段一段地读取数据,写入到Buffer中,再由Buffer写入到输出流中。

以下是代码示例:

long start = System.currentTimeMillis();
FileChannel channel = new FileInputStream("file.txt").getChannel();
ByteBuffer buffer = ByteBuffer.allocate((int) channel.size());
channel.read(buffer);
channel.close();
long end = System.currentTimeMillis();
System.out.println("NIO文件读取耗时:" + (end - start) + "ms");

MappedByteBuffer文件读取方式

MappedByteBuffer文件读取方式是一种内存映射文件的读取方式,将文件映射到物理内存中,通过对内存中数据的读取来进行文件读取操作。

以下是代码示例:

RandomAccessFile raf = new RandomAccessFile("file.txt", "r");
FileChannel channel = raf.getChannel();
MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
byte[] bytes = new byte[(int) channel.size()];
buffer.get(bytes);
raf.close();
channel.close();
long end = System.currentTimeMillis();
System.out.println("MappedByteBuffer文件读取耗时:" + (end - start) + "ms");

综上所述,传统IO流的文件读取方式适用于小文件的读取操作,在读取大文件时会有内存溢出的风险;使用NIO文件读取方式能够有效地提高文件读取性能;MappedByteBuffer文件读取方式则是一种内存映射文件的读取方式,在一定程度上能够提高读取效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈Java几种文件读取方式耗时 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Struts2.5版本struts.xml与web.xml配置的更改方法

    Struts2.5是一个非常流行的Java web框架,其中struts.xml与web.xml是两个重要的配置文件。如果你需要修改它们,以下是详细的操作步骤: 编辑struts.xml Struts2.5默认使用的是struts.xml配置文件,你可以根据自己的需要修改它。下面是修改struts.xml的步骤: 打开struts.xml文件 “` “`…

    Java 2023年5月20日
    00
  • 一篇文章弄懂Spring MVC的参数绑定

    以下是关于“一篇文章弄懂Spring MVC的参数绑定”的完整攻略,其中包含两个示例。 1. 前言 Spring MVC是一种常用的Java Web开发框架,它提供了一种灵活的方式来开发Web应用程序。在Spring MVC中,参数绑定是一种将HTTP请求参数绑定到控制器方法参数的方式。本攻略将详细讲解Spring MVC的参数绑定。 2. 参数绑定 2.1…

    Java 2023年5月16日
    00
  • spring boot过滤器实现项目内接口过滤

    spring boot过滤器实现项目内接口过滤 业务 由于业务需求,存在两套项目,一套是路由中心,一套是业务系统.现在存在问题是,路由中心集成了微信公众号与小程序模块功能,业务系统部署了多套服务.现在需要通过调用路由中心将接口重新路由到指定的业务系统中 需要处理的问题 将小程序,公众号用户信息与业务系统做绑定 将路由中心的接口与业务系统的接口判断出来 通过用…

    Java 2023年4月22日
    00
  • JavaWeb文件上传流程

    JavaWeb文件上传是Web开发中经常遇到的需求,下面将详细讲解JavaWeb文件上传的流程及相关代码示例: 1. 前端文件选择及上传 在前端页面中,需要定义一个表单,使用表单的file类型获取文件,将文件数据通过Ajax发往后端服务器。 下面是一个简单的HTML页面示例,其中包含一个表单和一个上传文件的input标签: <!DOCTYPE html…

    Java 2023年5月19日
    00
  • 使用Maven中的scope总结

    使用Maven中的scope属性可以控制依赖关系的传递范围。scope有以下属性值: compile 依赖于当前项目的compile周期,该依赖会一直对所有周期都有效。默认值。 provided 只在编译和测试classpath中有用,但运行时不在classpath中。例如,servlet-api依赖可以设置为provided。在打包时不会将依赖项打入输出文…

    Java 2023年5月19日
    00
  • GTA5 PC版全错误代码及解决方法

    GTA5 PC版全错误代码及解决方法 如果您在玩GTA5 PC版时遇到任何错误代码,不要惊慌,本文将为您提供详细的解决方案。 错误代码:ERR_NO_LAUNCHER 这个错误代码表示您的GTA5游戏启动器没有被正确安装或丢失了。解决方法如下: 确保您已经安装了最新版本的游戏启动器,可以从官方网站下载安装。 检查您的游戏目录是否存在“GTAVLauncher…

    Java 2023年6月15日
    00
  • JSP实现文件上传功能

    下面就是使用JSP实现文件上传功能的攻略。 1. 前置准备 在进行文件上传的操作时,需要使用到Web容器提供的Servlet API和一些第三方的类库,所以在开始实现前,需要进行一些前置准备。 1.1. 导入第三方类库 上传文件过程中,需要用到Apache的常用文件上传组件commons-fileupload,所以需要下载并导入到项目中。在项目中创建一个名叫…

    Java 2023年6月15日
    00
  • JavaWeb项目部署到服务器详细步骤详解

    以下是JavaWeb项目部署到服务器的详细步骤: 1. 准备工作 在进行JavaWeb项目部署之前,需要先进行一些准备工作。首先是服务器环境的准备。服务器需要安装Tomcat、JDK以及MySQL等相关软件,并且需要配置好环境变量等一些基本设置。 其次,需要将JavaWeb项目进行打包处理。一般来说,我们可以通过eclipse或者IntelliJ IDEA等…

    Java 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部