一:文件字节输入输出流复制

首先明确数据源和目的文件,然后就是“中转站”,最后就是关闭

package com.bjsxt.ioproject;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class TestCopyFile {
public static void main(String[] args) {
//数据源是文件
FileInputStream fileInputStream=null;
//目的文件
FileOutputStream fileOutputStream=null;
Long start=null;
Long end;
try {
fileInputStream = new FileInputStream(new File("F:\\***\\资料\\a.txt"));
fileOutputStream = new FileOutputStream(new File("F:\\***\\资料\\b.txt"));
byte [] b =new byte[1024];//用于存储我们所读到的字节(中转站)
int len=0;
start=System.currentTimeMillis();
while ((len=fileInputStream.read(b))!=-1) {
fileOutputStream.write(b, 0, len);
}
/*int b=0;//用于存储我们所读到的字节(中转站)
while ((b=fileInputStream.read())!=-1) {
//写入文件
fileOutputStream.write(b);
}*/
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//关闭
try {
if (fileOutputStream!=null) {
fileOutputStream.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (fileInputStream!=null) {
fileInputStream.close();
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
end=System.currentTimeMillis();
System.out.println("花费时间:"+(end-start)+"毫秒"); }
}

运行前:



运行后:





二:在字节输入输出流的中加入缓冲流复制

package com.bjsxt.ioproject;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; public class TestBufferedCopy {
public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream(new File("F:\\**\\资料\\a.txt"));
FileOutputStream fos=new FileOutputStream(new File("F:\\**\\资料\\c.txt"));
/**
* 使用缓冲流
*/
BufferedInputStream bis=new BufferedInputStream(fis);
BufferedOutputStream bos=new BufferedOutputStream(fos);
Long start=System.currentTimeMillis();
byte [] b=new byte[1024];
int len;
while ((len=bis.read(b))!=-1) {
bos.write(b, 0, len);
bos.flush();//手动刷新缓冲区
}
Long end=System.currentTimeMillis();
System.out.println("所花时间:"+(end-start)+"毫秒");
bos.close();
bis.close();
}
}

运行前:



运行后:





加入缓冲流:

FileInputStream 和 FileOutputStream 是节点流

BufferedInputStream 和 BufferedOutputStream 是处理流(包装流)

  1. 读文件和写文件都使用了缓冲区,减少了读写次数,从而

    提高了效率

  2. 当创建这两个缓冲流的对象时时,会创建了内部缓冲数组,

    缺省使用 32 字节大小的缓冲区.

  3. 当读取数据时,数据按块读入缓冲区,其后的读操作则直

    接访问缓冲区

  4. 当写入数据时,首先写入缓冲区,当缓冲区满时,其中的

    数据写入所连接的输出流。使用方法 flush()可以强制将缓

    冲区的内容全部写入输出流

  5. 关闭流的顺序和打开流的顺序相反.只要关闭高层流即可,



加入缓冲流:

Java修炼——文件字节输入输出流复制和缓冲流复制的更多相关文章

  1. FileInputStream和FileOutStream的使用——文件字节输入/输出流

    最近又退回到java EE的学习,这篇博客就来讲解一下字节流中最重要的两个类FileInputStream和FileOutputStream的用法: FileInputStream:全称是文件字节输入 ...

  2. Java IO详解(一)------字节输入输出流

    File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...

  3. Java IO详解(三)------字节输入输出流

    File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...

  4. Java基础之文件的输入输出流操作

    在介绍输入输出流之前,首先需要了解如何创建文件,创建文件夹以及遍历文件夹等各种操作,这里面不在一一介绍,主要介绍的是文件的输入输出流操作. 在起初学习文件操作之前,总是喜欢将输入输出弄混淆,后来通过看 ...

  5. java学习笔记IO之字节输入输出流

    IO字节输入输出流 OutputStream:字节输出流 该抽象类是所有字节输出流的超类: 定义了一些共性的成员方法: 1.写入一个字节 void write(int b);//b表示字节 2.写入字 ...

  6. 《三》Java IO 字节输入输出流

    那么这篇博客我们讲的是字节输入输出流:InputStream.OutputSteam(下图红色长方形框内),红色椭圆框内是其典型实现(FileInputSteam.FileOutStream)     ...

  7. Java 7源码分析第13篇 - 字节输入输出流(1)

    上一篇介绍了关于字节输入输出流的Java类框架,同时也简单介绍了一下各个类的作用,下面就来具体看一下这些类是怎么实现这些功能的. 1.InputStream和OutputStream InputStr ...

  8. Java中的字节输入出流和字符输入输出流

    Java中的字节输入出流和字符输入输出流 以下哪个流类属于面向字符的输入流( ) A BufferedWriter B FileInputStream C ObjectInputStream D In ...

  9. Java分享笔记:使用缓冲流复制文件

    [1] 程序设计 /*------------------------------- 1.缓冲流是一种处理流,用来加快节点流对文件操作的速度 2.BufferedInputStream:输入缓冲流 3 ...

随机推荐

  1. NLP-BM25算法理解

    前两天老师给我们讲解了BM25算法,其中包括由来解释,以及算法推导,这里我再将其整理,这里我不讲解之前的BIM模型,大家有兴趣可以自行了解.Okapi BM25:一个非二值的模型bm25 是一种用来评 ...

  2. 【vue】在VS Code中调试Jest单元测试

    在VS Code中调试Jest单元测试 添加调试任务 打开 vscode launch.json 文件,在 configurations 内加入下面代码 "configurations&qu ...

  3. 关于Jvm的见解(二)

    栈管运行,堆管存储!!! 栈呢,也叫作栈内存,主要管java程序的运行,在线程创建时创建,生命周期和线程一致,只要线程一结束,该栈就被GC,是线程私有的.基本类型的变量和对象的引用数据类型的变量都在栈 ...

  4. Mysql主从同步的实现原理与配置实战

    1.什么是mysql主从同步? 当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库. 2.主从同步有什么好处? 水平扩展数据库的负载能力. 容错,高可用.Failover ...

  5. 如何基于k8s快速搭建TeamCity(YAML分享)

    前言 最近有朋友基于之前的博客<Docker最全教程之使用TeamCity来完成内部CI.CD流程(十七)>搭建TeamCity时出现了一些问题,由于平常比较忙,没有及时答复,非常抱歉. ...

  6. nyoj 39-水仙花数

    39-水仙花数 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:35 submit:70 题目描述: 请判断一个数是不是水仙花数. 其中水仙花数定义各 ...

  7. 使用class关键字创建类组件、props参数

    import React,{Component} from 'react' import {render} from 'react-dom' // 使用class创建组件 class Movie ex ...

  8. Flex实现web版图片查看器

    项目需求: 在web端实现图片浏览,具有放大.缩小.滚轴放大缩小.移动.旋转以及范围控制. 成果图:

  9. php使用QueryList轻松采集JavaScript动态渲染页面

    QueryList使用jQuery的方式来做采集,拥有丰富的插件. 下面来演示QueryList使用PhantomJS插件抓取JS动态创建的页面内容. 安装 使用Composer安装: 安装Query ...

  10. 2019-11-3:渗透测试,基础学习,bypass类型笔记

    等价字符 空格:%20,+,(),%0a,%09,%a0,%0b,%0c,%0d,/**/等 =:like,regexp,liker,<>,! =等 and:&& or:x ...