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

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

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. 邵国际: C 语言对象化设计实例 —— 命令解析器

    本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 邵国际 来源: 微信公众号linux阅码场(id: linuxdev) 内容简介 单片机工程师常常疑惑为什么 ...

  2. javascript JSMpeg.js 播放视频解决不用全屏也能播放(也支持自动播放哦)

    javascript JSMpeg.js 播放视频解决不用全屏也能播放(也支持自动播放哦) 缺陷就是 因为采用的是 MPEG1解码器 所以清晰度有点低 做直播可以考虑下 如果要清晰度高点 可以采取序列 ...

  3. php 开启微信公众号开发者模式

    php 开启微信公众号开发者模式<pre><?php/** * wechat php test */header('Content-type:text');//define your ...

  4. tomcat的catalina.out日志切割

    目前我们的日志文件catalina.out累积后非常大,部分应用的catalina.out达到几十G并且还在持续增长. 日志文件太大不便于阅读和排查问题.业务增长不断增长,日志也在不断增加,为了以后便 ...

  5. 矢量图形(Vector Picture, SVG, PDF)转TiKZ代码

    在使用LaTeX的过程中,我们需要往往需要使用一些图片,譬如,在样式文件中,但是如果在样式文件中使用外部的图片,总感觉不是那么地舒服「请原谅强迫症」.因此,想办法将图形内嵌入LaTeX文件. 首先,我 ...

  6. Nginx Linux和Windows安装教程

    前言 本篇文章主要介绍的是Nginx Linux环境和Windows的安装教程. Nginx 介绍 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Syso ...

  7. java高级——反射

    慕课网<反射——Java高级开发必须懂的>听课笔记 一.class类的使用 class ClassDemo { public static void main(String[] args) ...

  8. SpringBoot系列教程JPA之指定id保存

    原文链接: 191119-SpringBoot系列教程JPA之指定id保存 前几天有位小伙伴问了一个很有意思的问题,使用 JPA 保存数据时,即便我指定了主键 id,但是新插入的数据主键却是 mysq ...

  9. thinkphp6.0 多应用模块下提示控制器不存在

    thinkphp6.0 多应用模块下提示控制器不存在 在项目根目录下使用Composer composer require topthink/think-multi-app 参考链接

  10. pat 1124 Raffle for Weibo Followers(20 分)

    1124 Raffle for Weibo Followers(20 分) John got a full mark on PAT. He was so happy that he decided t ...