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

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

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. mysql批量更新写法

    mysql批量更新写法<pre> $namedmp=filter($_POST['namedmp']); $namedsp=filter($_POST['namedsp']); $name ...

  2. Python面向对象 | 类的成员

    一. 细分类的组成成员 之前咱们讲过类大致分两块区域,静态字段部分和方法部分. 每个区域详细划分又可以分为: class A: company = '阿里巴巴' # 静态变量(静态字段) __tel ...

  3. 连接xshell 时 连不上的问题

      最近这一周由于自己的xshell突然连接不到虚拟机,在网上找了很多种方法也没能解决,以至于自己在学习很多知识的时候都没能很好的去验证,去尝试.最后在求助大佬的时候终于将xshell重新连接到了虚拟 ...

  4. Pandas进阶笔记 (一) Groupby 重难点总结

    如果Pandas只是能把一些数据变成 dataframe 这样优美的格式,那么Pandas绝不会成为叱咤风云的数据分析中心组件.因为在数据分析过程中,描述数据是通过一些列的统计指标实现的,分析结果也需 ...

  5. 创建一个线程池(java)

    private ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("billService-poo ...

  6. 初识web API接口及Restful接口规范

    一.web API接口 什么是web API接口?: 明确了请求方式,提供对应后台所需参数,请求url链接可以得到后台的响应数据 url : 返回数据的url https://api.map.baid ...

  7. My First Cloud Application's Design

    Structure Diagram as following: Questions list: 1. Skydrive Integration > Based on the MSDN commu ...

  8. PHP经典面试题:如何保证缓存与数据库的双写一致性?

    只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题? 面试题剖析 一般来说,如果允许缓存可以稍微的跟数据库偶尔有不一致的情况,也就是说 ...

  9. 领扣(LeetCode)删除排序数组中的重复项 个人题解

    给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例 1 ...

  10. websocket可以做什么

    本篇介绍的是websocket,但是并不介绍它的协议格式,一般能看明白http头也能明白websocket在协议切换前的协商,能看明白IP报头也就对websocket在协议切换后通讯格式不陌生.web ...