详解Java中IO字节流基本操作(复制文件)并测试性能

此次案例将以复制文件的形式来演示IO字节流的基本操作,复制一个mp3文件,文件信息如下图:

main方法测试

 public static void main(String[] args) throws Exception {
		//源文件
		String srcFile = "src/a.mp3";
		//目的文件
		String destFile = "src/b.mp3";
		long start = System.currentTimeMillis();
        ...
		复制文件方法
        ...
		long end = System.currentTimeMillis();
		System.out.println("共耗时"+(end-start)+"毫秒");
	}

一、一次读取一个字节

//一次读取一个字节
public static void copy1(String srcFile,String destFile) throws Exception {

	//封装文件
	InputStream in = new FileInputStream(srcFile);
	OutputStream out = new FileOutputStream(destFile);

	//复制文件
	int b = 0;
	while ((b = in.read()) != -1) {
			out.write(b);
	}

	//释放资源
	in.close();
	out.close();
	}

运行截图:

二、一次读取一个字节数组

// 一次读取一个字节数组
public static void copy2(String srcFile, String destFile) throws Exception {

	// 封装文件
	InputStream in = new FileInputStream(srcFile);
	OutputStream out = new FileOutputStream(destFile);

	// 复制文件
	byte[] buff = new byte[1024];
	int len = 0;
	while ((len = in.read(buff)) != -1) {
			out.write(buff, 0, len);
	}

	// 释放资源
	in.close();
	out.close();
	}

运行截图:

三、使用高效缓冲区一次读取一个字节

/ 使用高效缓冲区一次读取一个字节
public static void copy3(String srcFile, String destFile) throws Exception {

	// 封装文件
	BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
	BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));

	// 复制文件
	int b = 0;
	while ((b = bis.read()) != -1) {
			bos.write(b);
	}

	// 释放资源
	bis.close();
	bos.close();
	}

运行截图:

四、使用高效缓冲区一次读取一个字节数组

// 使用高效缓冲区一次读取一个字节数组
public static void copy4(String srcFile, String destFile) throws Exception {

	// 封装文件
	BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
	BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));

	// 复制文件
	byte[] buf = new byte[1024];
	int len = 0;
	while ((len = bis.read(buf)) != -1) {
			bos.write(buf, 0, len);
	}

	// 释放资源
	bis.close();
	bos.close();
	}

运行截图:

注:每台测试的速度结果不一样

以上所述是小编给大家介绍的Java中IO字节流基本操作(复制文件)并测试性能,详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Java使用字节流复制文件的方法

    其实用java程序复制文件并不难,具体内容如下 import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.LinkedList; import java.util.List; //文件复制 //E:/3.jpg ---> D:/1.jpg public class CopyFileByIo { public static void ma

  • Java字节流 从文件输入输出到文件过程解析

    假如需要复制一张图片,一份word,一个rar包.可以以字节流的方式,读取文件,然后输出到目标文件夹. 以复制一张4M的图片举例. 每次读一个字节: ch = (char)System.in.read(); //读入一个字符,返回读到的字节的int表示方式,读到末尾返回-1 复制时候一个字节一个字节的读取.写入,这样是很慢的.设置一个用来缓冲的字符数组,会让复制的过程快很多(每次读入的字节变多). 方便阅读,类的名称用中文描述 import java.io.*; public class 字节流

  • Java中的字节流文件读取教程(一)

    前言 上篇文章我们介绍了抽象化磁盘文件的 File 类型,它仅仅用于抽象化描述一个磁盘文件或目录,却不具备访问和修改一个文件内容的能力. Java 的 IO 流就是用于读写文件内容的一种设计,它能完成将磁盘文件内容输出到内存或者是将内存数据输出到磁盘文件的数据传输工作. Java IO 流的设计并不是完美的,设计了大量的类,增加了我们对于 IO 流的理解,但无外乎为两大类,一类是针对二进制文件的字节流,另一类是针对文本文件的字符流.而本篇我们就先来学习有关字节流的相关类型的原理以及使用场景等细节

  • Java字符流和字节流对文件操作的区别

    记得当初自己刚开始学习Java的时候,对Java的IO流这一块特别不明白,所以写了这篇随笔希望能对刚开始学习Java的人有所帮助,也方便以后自己查询.Java的IO流分为字符流(Reader,Writer)和字节流(InputStream,OutputStream),字节流顾名思义字节流就是将文件的内容读取到字节数组,然后再输出到另一个文件中.而字符流操作的最小单位则是字符.可以先看一下IO流的概述: 下面首先是通过字符流对文件进行读取和写入: package lib; import java.

  • Java文件(io)编程_文件字节流的使用方法

    案例1: 演示FileInputStream类的使用(用FileInputStream的对象把文件读入到内存) 首先要在E盘新建一个文本文件,命名为test.txt,输入若干字符 public class Demo_2 { public static void main(String[] args) { File f=new File("e:\\test.txt"); //得到一个文件对象f,指向e:\\test.txt FileInputStream fis=null; try {

  • Java中的字节流文件读取教程(二)

    接着上篇文章,我们继续来学习 Java 中的字节流操作. 装饰者缓冲流 BufferedInput/OutputStream 装饰者流其实是基于一种设计模式「装饰者模式」而实现的一种文件 IO 流,而我们的缓冲流只是其中的一种,我们一起来看看. 在这之前,我们使用的文件读写流 FileInputStream 和 FileOutputStream 都是一个字节一个字节的从磁盘读取或写入,非常耗时. 而我们的缓冲流可以预先从磁盘一次性读出指定容量的字节数到内存中,之后的读取操作将直接从内存中读取,提

  • 详解Java中IO字节流基本操作(复制文件)并测试性能

    此次案例将以复制文件的形式来演示IO字节流的基本操作,复制一个mp3文件,文件信息如下图: main方法测试 public static void main(String[] args) throws Exception { //源文件 String srcFile = "src/a.mp3"; //目的文件 String destFile = "src/b.mp3"; long start = System.currentTimeMillis(); ... 复制文

  • 一文详解Java中字符串的基本操作

    目录 一.遍历字符串案例 二.统计字符次数案例 三.字符串拼接案例 四.字符串反转案例 五.帮助文档查看String常用方法 一.遍历字符串案例 需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串 思路: 1.键盘录入一个字符串,用 Scanner 实现 2.遍历字符串,首先要能够获取到字符串中的每一个字符 public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的 3.遍历字符串,其次要能够获取到字符串的长度 public int

  • 一文详解Java中的类加载机制

    目录 一.前言 二.类加载的时机 2.1 类加载过程 2.2 什么时候类初始化 2.3 被动引用不会初始化 三.类加载的过程 3.1 加载 3.2 验证 3.3 准备 3.4 解析 3.5 初始化 四.父类和子类初始化过程中的执行顺序 五.类加载器 5.1 类与类加载器 5.2 双亲委派模型 5.3 破坏双亲委派模型 六.Java模块化系统 一.前言 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最 终形成可以被虚拟机直接使用的Java类型,这个过程

  • 图文详解Java中的序列化机制

    目录 概述 对象序列化和反序列化机制 修改默认的序列化机制 使用transient关键字 自定义readObject.writeObject方法 实现Externalizable接口 serialVersionUID的作用 使用序列化clone 概述 java中的序列化可能大家像我一样都停留在实现Serializable接口上,对于它里面的一些核心机制没有深入了解过.直到最近在项目中踩了一个坑,就是序列化对象添加一个字段以后,使用方系统报了反序列化失败,原因是我们双方的序列化对象没有加上seri

  • 详解JAVA中使用FTPClient工具类上传下载

    详解JAVA中使用FTPClient工具类上传下载 在Java程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件.本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件. 1.写一个javabean文件,描述ftp上传或下载的信息 实例代码: public class FtpUseBean { private String host; private Integer port; private String us

  • 详解Java中AbstractMap抽象类

    jdk1.8.0_144 下载地址:http://www.jb51.net/softs/551512.html AbstractMap抽象类实现了一些简单且通用的方法,本身并不难.但在这个抽象类中有两个方法非常值得关注,keySet和values方法源码的实现可以说是教科书式的典范. 抽象类通常作为一种骨架实现,为各自子类实现公共的方法.上一篇我们讲解了Map接口,此篇对AbstractMap抽象类进行剖析研究. Java中Map类型的数据结构有相当多,AbstractMap作为它们的骨架实现实

  • 详解java中的阻塞队列

    阻塞队列简介 阻塞队列(BlockingQueue)首先是一个支持先进先出的队列,与普通的队列完全相同: 其次是一个支持阻塞操作的队列,即: 当队列满时,会阻塞执行插入操作的线程,直到队列不满. 当队列为空时,会阻塞执行获取操作的线程,直到队列不为空. 阻塞队列用在多线程的场景下,因此阻塞队列使用了锁机制来保证同步,这里使用的可重入锁: 而对于阻塞与唤醒机制则有与锁绑定的Condition实现 应用场景:生产者消费者模式 java中的阻塞队列 java中的阻塞队列根据容量可以分为有界队列和无界队

  • 详解Java中的不可变对象

    不可变对象想必大部分朋友都不陌生,大家在平时写代码的过程中100%会使用到不可变对象,比如最常见的String对象.包装器对象等,那么到底为何Java语言要这么设计,真正意图和考虑点是什么?可能一些朋友没有细想过这些问题,今天我们就来聊聊跟不可变对象有关的话题. 一.什么是不可变对象 下面是<Effective Java>这本书对于不可变对象的定义: 不可变对象(Immutable Object):对象一旦被创建后,对象所有的状态及属性在其生命周期内不会发生任何变化. 从不可变对象的定义来看,

  • 详解Java 中的 AutoCloseable 接口

    一.前言 最近用到了 JDK 7 中的新特性 try-with-resources 语法,感觉到代码相对简洁了很多,于是花了点时间详细学习了下,下面分享给大家我的学习成果. 二.简单了解并使用 try-with-resources语法比较容易使用,一般随便搜索看下示例代码就能用起来了.JDK 对这个语法的支持是为了更好的管理资源,准确说是资源的释放. 当一个资源类实现了该接口close方法,在使用try-with-resources语法创建的资源抛出异常后,JVM会自动调用close 方法进行资

  • 详解JAVA中priorityqueue的具体使用

    Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示.本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度,将让读者建立对PriorityQueue建立清晰而深入的认识. 总体介绍 前面以JavaArrayDeque为例讲解了Stack和Queue,其实还有一种特殊的队列叫做PriorityQueue,即优先队列.优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,

随机推荐