Java I/O流 复制文件速度对比
Java I/O流 复制文件速度对比

首先来说明如何使用Java的IO流实现文件的复制:
第一步肯定是要获取文件
这里使用字节流,一会我们会对视频进行复制(视频为非文本文件,故使用之)
FileInputStream fis = new FileInputStream("copyFileName.format");// 用于读取文件
FileOutputStream fos = new FileOutputStream("generatedFileName.format"); // 用于生成文件,若文件不存在,则会新生成
第二步得到文件后就要进行复制
由第一步可知我们用的是字节流,所以我们使用byte[] 进行搬运数据
byte[] buffer = new btye[5];
int len;
// read(btye[] b)会对文件进行读取,将数据填入 b 中,并返回读取数量,如读取完毕返回 -1
while ((len = fis.read(buffer)) != -1) {
fos.write(buffer, 0, len); // 将读取的数据写入文件中
}
第三步也是最重要的一步,关闭文件
fos.close();
fis.close();
明白上述步骤后我们来看完整的代码
public void copyFile() throws IOException{ // 这里可能会抛出异常
FileInputStream fis = new FileInputStream("copyFileName.format"); // 用于读取文件
FileOutputStream fos = new FileOutputStream("generatedFileName.format"); // 用于生成文件
byte[] buffer = new byte[5];
int len;
while ((len = fis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
fos.close();
fis.close();
}
假设我们需要运一堆沙子到工地,使用摩托车和卡车的速度是不一样,即使摩托车开的比卡车快,但是一次的载货量太少,需要不停的往返,而卡车一次能搬运不少,只需几次就可以将沙子搬完。
这里buffer就相当于运输工具,开始时定义的大小影响着拷贝文件的效率。
我们来做一个测试,检验一下:


运行一下

可以看出数组容量的增大,对于复制速度的提升是巨大。
既然如此为什么不尽可能的大呢?
是因为数组开辟是需要占用内存的,并不是越大越好。
所以我们常用1024来设定数组的大小,这样不至于复制效率太慢也不至于占用内存过多。
其实,我们还可以使用BufferedInputStream和BufferedOutputStream对FileInputStream和FileOutputStream进行包装,能够大大提升复制的效率。
实现方法与类似

运行一下

可以用BufferedInputStream和BufferedOutputStream对FileInputStream和FileOutputStream进行包装,即使buffer的容量为5也比第一测试时,用1024复制的要快。
Java I/O流 复制文件速度对比的更多相关文章
- java通过IO流复制文件
package kimoji; import java.io.*; public class FileTest { public static void main(String[] args) thr ...
- Java IO流之【缓冲流和文件流复制文件对比】
与文件流相比,缓冲流复制文件更快 代码: package Homework; import java.io.BufferedOutputStream; import java.io.File; imp ...
- JAVA通过I/O流复制文件
JAVA通过I/O流复制文件 本文是对字节流操作,可以多音频视频文件进行操作,亲测有效. 个人感觉这个东西就是靠记的, 没什么好解释的,,,, import java.io.File; import ...
- Java基础小知识1——分别使用字节流和字符流复制文件
在日常使用计算机过程中经常会涉及文件的复制,今天我们就从Java代码的角度,看看在Java程序中文件复制的过程是如何实现的. 1.使用字节流缓冲区复制文件 示例代码如下: import java.io ...
- Java中字节流和字符流复制文件
字节流和字符流复制文件的过程: 1.建立两个流对象 绑定数据源和目的地 2.遍历出需复制的文件写入复制过后的新文件中(只不过是遍历的时候是区分字节和字符的) 3.访问结束后关闭资源 字节流复制文件: ...
- Java分享笔记:使用缓冲流复制文件
[1] 程序设计 /*------------------------------- 1.缓冲流是一种处理流,用来加快节点流对文件操作的速度 2.BufferedInputStream:输入缓冲流 3 ...
- java基础IO流 复制键盘录入的目录,复制其中的.java文件到指定目录,指定目录中有重名,则改名 对加密文件计算字母个数
package com.swift.jinji; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; im ...
- java核心技术之流与文件
InputStream和OutputStream构成了输入/输出类层次结构的基础.用于按字节进行读写.而与之处在同一等级的Reader/Writer同样作为抽象类定义了用于对字符进行读取的类层次结构, ...
- Java之字节流操作-复制文件
package test_demo.fileoper; import java.io.FileInputStream; import java.io.FileOutputStream; import ...
随机推荐
- [C/C++]快速读入代码(快读)
快读 1.为什么要有快读 好吧,有些题目看上去十分简单,例如https://www.luogu.com.cn/problem/P4305这道题,实际上数据量巨多,光是一个测试点就可能有几个MB,在这种 ...
- next()与nextLine()的区别
abc def ghij kl mno pqr st uvw xyz 你用next(),第一次取的是abc,第二次取的是def,第三次取的是ghij 你用nextLine(),第一次取的是abc de ...
- 洛谷P1579.验证哥德巴赫猜想(DFS+素性测试)
题目背景 1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是 ...
- 牛X!看完阿里P8架构师推荐的spring三剑客,成功涨薪5k
一直以来,Spring都被Java程序员视为杀手级别的应用,是为简化Java EE应用程序的开发为目标而创建的.Spring可以做很多事情,它为企业级开发提供给了丰富的功能,但是这些功能的底层都依赖于 ...
- 面试中HashMap链表成环的问题你答出了吗
HashMap作为老生常谈的问题,备受面试官的青睐,甚至成为了面试必问的问题.由于大量的针对HashMap的解析横空出世,面试官对HashMap的要求越来越高,就像面试官对JVM掌握要求越来越高一样, ...
- Python方法oslo_service.loopingcall.LoopingCallDone代码示例
Python方法oslo_service.loopingcall.LoopingCallDone代码示例 demo: from oslo_service import loopingcall def ...
- Ubuntu 20.04美化及QQ、微信安装
1.前言 电脑用了很多年了,安装的windows7,经常出现很卡的情况,于是今天索性重装了系统.既然重装系统,选择什么系统好呢,windows10系统的话,对于我这老旧本来说,可能真的是为难它了.刚好 ...
- Python中print()函数不换行的方法以及分隔符替换
一.让print()函数不换行 在Python中,print()函数默认是换行的.但是,在很多情况下,我们需要不换行的输出(比如在算法竞赛中).那么,在Python中如何做到这一点呢? 其实很简单.只 ...
- CentOS 7/8上部署Ceph
Ceph是一个分布式的存储系统,可以在统一的系统中提供唯一的对象.块和文件存储,Ceph的大致组件如下: 1. Ceph监视器(ceph-mon):用来维护集群状态的映射,包括监视器映射,管理器映射, ...
- Windows servers 2008 环境下, DHCP的搭建。
日常上网,客户端的主机都是使用DHCP动态分配的,家用的路由器就是内置了一个DHCP服务,所以每次分到的IP地址基本的都是192.168.x.x/24 网段的.不过家用的路由器最多只能连十台左右.那么 ...