返回顶部
首页 > 资讯 > 精选 >Java 中怎么提高文件读写速度
  • 576
分享到

Java 中怎么提高文件读写速度

2023-06-17 12:06:55 576人浏览 薄情痞子
摘要

这篇文章给大家介绍Java 中怎么提高文件读写速度,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java NIO的出现旨在提高文件的读写速度,当然io用NIO重新实过,所以我们不用显示的调用NIO也能享受这种高效的文件

这篇文章给大家介绍Java 中怎么提高文件读写速度,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

Java NIO的出现旨在提高文件的读写速度,当然io用NIO重新实过,所以我们不用显示的调用NIO也能享受这种高效的文件读写。

Java NIO的高效得益于其两大"助手":Channel(管道)和Buffer(缓冲器)。当然这两个"得力助手"的"年龄"远远比java大!力求简单易懂的把知识讲解给大家,我举一个例子来说明一下这"两元大将"是如何在java NIO中配合工作的。

中国古代有一种传统的吸烟器具---水烟袋。我想用这个东西来模拟一下Channel和Buffer的工作原理。不求说的好,力求准确无误。

分析一下水烟袋是如何工作的:

Java 中怎么提高文件读写速度

***步,准备工作,准备好上等烟丝;第二步,将"水斗"中装入适量的水,烟仓中装满烟丝并插入水斗中,然后再将烟管插入水斗中;第三步,点燃烟丝并吸气。香烟从烟仓产生,经过水的过滤进入水上的空闲区。第四步,享受吸烟的快感.....从这个例子中我们提取出主要对象"烟",来分析一下它的运动轨迹。烟仓把烟生产出来,经过水的过滤飘到水上面的空闲区域,然后通过烟管进入人的体内。

如果上面的过程大家理解了,明白了,那么java NIO你已经了解了50%,至少你已经知道它的工作原理了。因为用NIO处理的数据和用水烟袋中吸烟很相似。我们分析一下NIO的工作原理,非常简单。

当然和吸烟一样我们首先必须有要用NIO来处理需求的欲望(这好比你想要吸烟了),比方说我想要将C盘下面的wk.txt文件进行备份,备份文件的名称为wk-bak.txt。类比刚刚吸烟的那个过程:

步骤一:准备工作,确定文件的位置,并将程序不可直接操作的文件转换成字符流的形式(这一步和上边吸烟实例的***步没有什么差别,只是进行一些简单的准备工作)。

  1. String inFile = "C:\\wk.txt";

  2. String outFile = "C:\\wk-bak.txt";

  3. FileInputStream inf = new FileInputStream(inFile);

  4. FileOutputStream outf = new FileOutputStream(outFile);

  5. ByteBuffer buffer = ByteBuffer.allocate(1024); 


步骤二:创建文件输入管道,和文件输出管道。(这一步与上边吸烟的第二部稍有差别,因为Channel和Buffer是在读写的时候才发生的"连接"动作)

//准备文件读取的管道-->相当于烟仓和烟管FileChannel inFc = inf.getChannel();  FileChannel outFc = outf.getChannel();  Charset charSet = Charset.forName("utf-8");  //进行编码解码-->相当于水斗中水的过滤作用  CharsetDecoder decoder = charSet.newDecoder();  CharsetEncoder encoder = charSet.newEncoder();

步骤三:开始进行文件备份工作。

 while(true) {              //准备向Buffer中写入数据-->相当于点燃烟丝,完事具备只欠东风         buffer.clear();                          //进行字符编码 -->相当于水的过滤作用         CharBuffer cb = decoder.decode(buffer);         ByteBuffer bb = encoder.encode(cb);                            //数据经过编码以后暂存缓冲区-->相当于经过水过滤后的烟暂停在水斗中              int t = inFc.read(bb);              if(t == -1) {                  break;              }                          bb.flip();                          //将字节码写入目标文件-->相当于烟已经进入到嘴里              outFc.write(bb);          }

步骤四:检查文件是否备份成功。发现C盘下面多了一个wk-bak.txt的文件,内容与wk.txt一摸一样。接下来享受java带给你的快感....

上面的例子估计大家已经理解的差不多了,当然如果深究也会有一些不太妥当的地方,但是不要较真,目的是学习NIO,并不是吸烟。如果感觉你可以了那么就请把上面的例子补充完整,运行一下,享受一下NIO的威武(当然字符编码并不是必须的,只是让这个例子显得完整一点)。

好吧如果你理解了上面的东西,并且真正的补全了文件备份的小程序,那么就来进行稍微深入一点的学习吧。

上文我提到了举吸烟的例子是有欠妥当的,其中之一就是Buffer的内部机制和"水斗"简单的过滤功能是不一样的。还有字符编码那一块也不是在Buffer内部实现的东西,decoder和encoder是针对Buffer的两个工具。那我们接下来分析一下Buffer内部机制到底不一样在哪里呢(主要分析常用的两个方法;clear(),flip())?

来吧,打开Buffer的源码(摘取有用的部分):

public abstract class Buffer {      // Invariants: mark <= position <= limit <= capacity      private int mark = -1;      private int position = 0;      private int limit;      private int capacity;   public final Buffer clear() {      position = 0;      limit = capacity;      mark = -1;      return this;      }       public final Buffer flip() {      limit = position;      position = 0;      mark = -1;      return this;      }

 首先我们要明确一点,所谓的缓冲器仅仅是一个"多功能"的数组。可能在这个Buffer类中没有体现,但是如果我们打开ByteBuffer的源码会有byte[]的数组,打开CharBuffer的源码会有char[]的数组。因为Buffer是所有缓冲器的父类,所以他它不能预计会有多少种缓冲器,所以索性让"儿子"们自己实现去吧。

既然知道了缓冲器是一个"多功能的数组",那么我们用画图的形式来分析一下上面Buffer的源码。

Java 中怎么提高文件读写速度

假设我们定义了一个8个单位大的缓冲区,如上图(其实Buffer也就是这么一个东西)。首先告诉大家那三个重要的关于缓冲区状态的的属性:

capacity:缓冲区的容量;

limit:缓冲区还有多少数据能够取出或者缓冲区还有多少容量用于存放数据;

position:相当于一个游标(cursor),记录我们从哪里开始写数据,从哪里开始读数据。

刚还说到flip()和clear()是Buffer的两个重要的方法,因为它们两个方法决定了缓冲是否能正常的进行读写工作。

当我们要想从缓冲区中写数据的时候必须先执行flip()方法,当我们要想从缓冲区中读数据时必须先执行clear()方法。

Java 中怎么提高文件读写速度

***次向Buffer中写入数据时,执行一次flip()方法以后,Buffer的结构变成了这样:position指向了***个可以存取数据的0号位,limit和capacity同时指向***位。

Java 中怎么提高文件读写速度

假如***次我们向Buffer中写入了3单位的数据,我们再次执行flip()方法则Buffer的结构会变成上图的所示。但是经过flip()的改造后position总是指向Buffer中***个可用的位置。那么,未执行flip()方法以前position在哪里呢?很简单,指向***一个数据的位置。

Java 中怎么提高文件读写速度

当我们想要从Buffer中读取数据时,执行clear()方法,Buffer的内部结构变成了上图所示,position指向了可读数据的首位,limit指向了原来position的位置。

从上面的几幅图中我们看出:capacity代表了Buffer的容量是不变的,limit与position的差总是表示Buffer总可以读的数据,或者Buffer中可以写数据的容量。还有position总是小于等于limit,limit总是小于等于capacity。

其实到这里我们已经发现,NIO并不像IO那么复杂,因为IO 中的Decorator模式和Adaptor模式确实让我们一时间摸不到头脑,但是熟悉了会感觉到IO的设计之精美。

NIO中还有一个知识点就是无阻塞的Socket编程,这里就不说了,因为比较复杂,但是如果我们真正理解了Selector这个调度者的工作,那么无阻塞的实现机制我们差不多就掌握了,复杂也就是编码上面的事了。

关于Java 中怎么提高文件读写速度就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: Java 中怎么提高文件读写速度

本文链接: https://lsjlt.com/news/288907.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java 中怎么提高文件读写速度
    这篇文章给大家介绍Java 中怎么提高文件读写速度,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java NIO的出现旨在提高文件的读写速度,当然IO用NIO重新实过,所以我们不用显示的调用NIO也能享受这种高效的文件...
    99+
    2023-06-17
  • 如何在 Golang 中使用内存映射提高文件读写速度?
    使用 syscall.mmap 可在 go 中实施内存映射,将文件直接映射到内存以提高读写速度。该函数返回一个字节切片,代表映射区域,允许读写访问,并与文件共享修改。使用 syscall...
    99+
    2024-05-16
    golang 内存映射
  • Java怎么读写XML文件
    本篇内容介绍了“Java怎么读写XML文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!import java.util.*;import ...
    99+
    2023-06-03
  • 如何提高vps传文件的速度
    要提高VPS传输文件的速度,可以尝试以下几个方法:1. 选择合适的VPS供应商:不同的VPS供应商可能具有不同的网络带宽和服务器性能...
    99+
    2023-09-14
    vps
  • php上传文件速度如何提高
    要提高php上传文件的速度,可以采取以下几种方法:1. 增加文件上传大小限制:可以通过修改php.ini文件中的upload_max...
    99+
    2023-10-11
    php
  • 怎么提高电脑速度
    要提高电脑的速度,可以尝试以下几种方法:1. 清理磁盘空间:删除不必要的文件和程序,清理临时文件,以释放磁盘空间。2. 禁用启动项:...
    99+
    2023-09-07
    电脑
  • pycharm写文件速度慢怎么解决
    如果你在使用PyCharm时遇到了文件写入速度慢的问题,可以尝试以下方法来解决:1. 检查文件系统:确保你的文件系统没有出现任何问题...
    99+
    2023-09-29
    pycharm
  • java中怎么使用io流读写文件
    在Java中,可以使用IO流来读写文件。下面是一些常见的示例:1. 使用FileInputStream和FileOutputStre...
    99+
    2023-08-26
    java
  • java中读写文件步骤
    在Java中,读写文件的步骤如下:1. 创建一个文件对象,用于表示要读写的文件。可以使用`File`类来创建文件对象,例如:`Fil...
    99+
    2023-09-23
    java
  • Vista 优化预读文件设置,提速开关机速度
    至于Windows操作系统开关机优化,即将会有个超级大全文章出来,比当年发在Vista之家的那个宝典还要全,当然,所有的一切都是技术探讨,大家辩证的去看,毕竟,里面参杂了软媒编辑自己的一些个人观点。取精华、去糟粕吧 :)...
    99+
    2023-05-25
    Vista 优化 预读 速度 关机 文件
  • Python中怎么读写文件
    Python中怎么读写文件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。从文件读取和写入文件是任何编程语言的常见需求。任何文件在读写之前都需要打开。大多数编程语...
    99+
    2023-06-15
  • linux怎么查看io读写速度
    在Linux中可以使用命令`iostat`来查看磁盘IO读写速度。1. 打开终端。2. 输入以下命令来安装`iostat`工具(如果...
    99+
    2023-10-10
    linux
  • win10怎么看硬盘读写速度
    在Windows 10上,你可以使用以下方法来查看硬盘的读写速度:1. 使用Windows资源监视器:- 按下Ctrl + Shif...
    99+
    2023-08-23
    win10
  • xp系统中怎么设置预读文件提高系统性能加快系统启动速度
    本篇内容介绍了“xp系统中怎么设置预读文件提高系统性能加快系统启动速度”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!虽然在XP系统中有一个预...
    99+
    2023-06-14
  • python怎么提高运行速度
    以下是一些提高Python运行速度的方法:1. 使用更高效的算法:优化算法可以显著提高程序的运行速度。通过选择更适合问题的算法,可以...
    99+
    2023-09-08
    python
  • 怎么提高python运行速度
    提高Python程序的运行速度有以下几个方法:1. 使用更高效的算法和数据结构:选择适当的算法和数据结构可以大大提高程序的运行速度。...
    99+
    2023-09-04
    python
  • 怎么提高cdn加载速度
    提高CDN加载速度有以下几种方法:1.选择可靠的CDN服务提供商:选择信誉良好的CDN服务提供商,确保其拥有强大的网络基础设施和广泛...
    99+
    2023-09-07
    cdn加载
  • win10怎么提高开机速度
    这篇文章主要介绍“win10怎么提高开机速度”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win10怎么提高开机速度”文章能帮助大家解决问题。方法一:一、启用快速启动功能按win+r 键调出“运行”...
    99+
    2023-07-01
  • python运行速度怎么提高
    有几种方法可以提高Python的运行速度: 使用适当的数据结构:选择合适的数据结构可以提高程序的效率。例如,使用字典而不是列表来...
    99+
    2023-10-25
    python
  • 怎么提高ssl传输速度
    要提高SSL传输速度,可以考虑以下几个方面:1. 使用更快的硬件:使用更高性能的服务器和网络设备可以提高SSL传输速度。确保服务器具...
    99+
    2023-08-24
    ssl
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作