复制13.1MB的文本文件java仅用18毫秒(速度很OK)

这篇具有很好参考价值的文章主要介绍了复制13.1MB的文本文件java仅用18毫秒(速度很OK)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


//记录一下!

BufferedInputStream和BufferedOutputStream是Java标准库中的两个I/O类,它们提供了对输入和输出流的缓冲功能,以提高I/O性能。

BufferedInputStream是InputStream的子类,它使用内部缓冲区来读取输入流的数据。当使用BufferedInputStream读取数据时,它会尽可能多地从底层输入流中读取数据并存储在内部缓冲区中。这样,在后续读取操作时,可以从缓冲区中快速获取数据,而不需要每次都从底层输入流中读取,从而减少了I/O操作的次数,提高了读取性能。

BufferedOutputStream是OutputStream的子类,它使用内部缓冲区来写入输出流的数据。当使用BufferedOutputStream写入数据时,数据会先被写入到内部缓冲区,然后根据缓冲区的大小或者手动调用flush()方法时,数据才会被一次性写入到底层输出流中。这样可以减少实际的写入操作次数,提高写入性能。

使用BufferedInputStream和BufferedOutputStream的好处是,它们可以减少对底层输入输出流的直接访问,减少了频繁的I/O操作,从而提高了读写的效率。特别是在处理大量数据或者网络传输时,使用缓冲流可以明显地提高程序的性能。

使用BufferedInputStream来包装FileInputStream,以便进行分块读取,并使用BufferedOutputStream来包装FileOutputStream,以便进行分块写入
bufferSize变量定义了缓冲区的大小,可以根据需要进行调整。

循环中,我们使用bis.read(buffer)来从输入流中读取数据块,并将读取的字节数存储在bytesRead变量中。然后,我们使用bos.write(buffer, 0, bytesRead)将读取的数据块写入到输出流中。

通过这种方式,我们可以一次处理一小块数据,而不是将整个文件加载到内存中,从而避免内存溢出问题。同时,使用缓冲流可以提高读取和写入的性能,因为它们会在内部维护一个缓冲区,减少了对底层文件系统的频繁访问。文章来源地址https://www.toymoban.com/news/detail-499017.html

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.File;

public class FileProcessor {
    public static void main(String[] args) {
        String sourceFilePath = "txttestA.txt";
        String destinationFilePath = "txttestB.txt";
        int bufferSize = 1118192; //1118192Byte=1.066391MB 缓冲区大小,可以根据需要进行调整

        File file = new File(sourceFilePath);
        long fileSizeBytes = file.length();
        double fileSizeMB = (double) fileSizeBytes / (1024 * 1024); // 转换为MB
        System.out.println("文件txttestA.txt大小: " + fileSizeMB + " MB");
        long startTime = System.currentTimeMillis();

        try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(sourceFilePath), bufferSize);
             BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destinationFilePath), bufferSize)) {

            byte[] buffer = new byte[bufferSize];
            int bytesRead;
            while ((bytesRead = bis.read(buffer)) != -1) {
                bos.write(buffer, 0, bytesRead);
            }
            //BufferedOutputStream的write(byte[] buffer, int offset, int length)方法用于将字节数组中的数据写入输出流。
            // 刷新缓冲区,确保所有数据都被写入到输出流中
            bos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }

        long endTime = System.currentTimeMillis();
        long elapsedTime = endTime - startTime;

        System.out.println("读写过程所用的时间:" + elapsedTime + "毫秒");
    }
}

// 输出:
// 文件txttestA.txt大小: 13.102161407470703 MB
// 读写过程所用的时间:18毫秒

到了这里,关于复制13.1MB的文本文件java仅用18毫秒(速度很OK)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决 vmware 虚拟机无法安装 macos13.1

    win11 专业版 VMware workstation 17 pro macos13.1 ios镜像 unlocker 4.2.5 新建虚拟机的时候可以看到没有选择macos系统的那一项 所以需要使用 unlocker 软件来进行解锁,下载地址:https://github.com/DrDonk/unlocker/releases 找到最新版本压缩包下载,当前最新版本是4.2.5 解压出来,然后把 iso 文件夹中

    2024年02月12日
    浏览(45)
  • Quartus II 13.1与Modelsim SE的安装

    软件资源下载链接:提取码:38ny 注册资源下载链接(用于Quartus II):提取码:zbho 注册资源下载链接(用于Modelsim):提取码:hi5b 在文件 QuartusII_13.1 文件下,解压 QuartusSetup-13.1.0.162.rar ,: 解压后得到: 运行这个可执行程序: 点击next: 之后勾选对应选项并点击next: 之后

    2024年02月06日
    浏览(47)
  • Linux ->windows自由复制文件文本

    这样就实现自由ctrl c ctrl v啦

    2024年01月23日
    浏览(60)
  • 13.1 linux命令行查看控制串口(uart)全攻略

    本文主要内容: 1 串口启动驱动打印 2 sys目录下的串口信息 3 proc目录下的串口信息 4 etc目录下的串口信息 5 dev目录下的串口信息 6 stty控制具体的串口 7 命令行控制串口读写 8 串口数据解析

    2024年02月06日
    浏览(36)
  • STM32串口printf调试输出(SSCOM V5.13.1)

    PC与CPU相互通信就是通过USB Type_C接口和USB电平转换实现的。 我们可以看到,CPU通过管脚USART1连接CH340C芯片将USB转串口,实现PC与CPU之间的通信。 当然,这里用的是CH340的芯片,我们就需要安装ch340串口。 按住Ctrl+s生成代码。 在usart.h中添加头文件stdio.h 标准库的 printf函数 能方

    2024年02月12日
    浏览(48)
  • c# 操作剪切板,复制文本或文件

     1.将文本内容放入剪切板          Clipboard.SetDataObject(\\\"要复制的内容\\\");//复制内容到粘贴板 2.将文本内容从剪切板取出               IDataObject iData = Clipboard.GetDataObject();           if (iData.GetDataPresent(DataFormats.Text))            {            label1.Text = (String)iData.GetData(D

    2023年04月08日
    浏览(40)
  • Quartus 13.1与Modelsim或Modelsim Altera进行波形联合仿真

    Quartus II 13.1软件自10.0版本以后,便不再自带波形仿真工具,需要借助Modelsim进行波形仿真。一般安装Quartus II的时候,会默认安装Modelsim Altera,如果需要用到Modelsim软件的话,需要额外再安装一下。本文将介绍一下Quartus II 13.1软件与Modelsim(需要提前安装好)或Modelsim Altera进行

    2024年02月11日
    浏览(45)
  • FPGA NCOip核的使用及仿真(quartusii 13.1+modelsimse 10.5)

    介绍了13.1版本的quartus中的NCOip核的破解、使用和仿真功能 文章目录 前言 一、 quartus ip核 二 、 nco ip核的配置 1  ip核的配置 2. 代码编写 3.联合仿真 总结 本文主要还介绍了13.1版本的quartus中的NCOip核的破解、使用仿真功能。适合正点原子开拓者等相同芯片系列产品的参考。 提

    2024年01月20日
    浏览(36)
  • FPGA-Quartus II 13.1画逻辑门电路图的详细步骤

            作为学习FPGA的小白一枚,总是在看论文的时候发现大牛们的内容中包含逻辑设计图也就是门电路的截图,而我自己在学习的时候看正点原子或者野火视频的时候没有发现这一部分(也有可能有,但我没全部看完系列视频,所以也就没发现),就上网搜索了这一部

    2024年02月12日
    浏览(83)
  • 巨神奇,2013年的老Mac,竟直接装上macOS Ventura 13.1 Beta版

    上期这篇文章《终于,老Mac可以跨级安装macOS Ventura了》中,我说了通过OpenCore Legacy Patcher可以跨级安装macOS Ventura,但却没给出一个切实的解决方法。本期我就说一下跨级安装的方法。 官方的安装方法是USB抹盘安装的,特别麻烦,不用听它的,其实还有更优的解决方法。 首先

    2024年02月05日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包