Java修炼——文件字节输入输出流复制和缓冲流复制
一:文件字节输入输出流复制
首先明确数据源和目的文件,然后就是“中转站”,最后就是关闭
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 是处理流(包装流)
读文件和写文件都使用了缓冲区,减少了读写次数,从而
提高了效率当创建这两个缓冲流的对象时时,会创建了内部缓冲数组,
缺省使用 32 字节大小的缓冲区.当读取数据时,数据按块读入缓冲区,其后的读操作则直
接访问缓冲区当写入数据时,首先写入缓冲区,当缓冲区满时,其中的
数据写入所连接的输出流。使用方法 flush()可以强制将缓
冲区的内容全部写入输出流关闭流的顺序和打开流的顺序相反.只要关闭高层流即可,

加入缓冲流:

Java修炼——文件字节输入输出流复制和缓冲流复制的更多相关文章
- FileInputStream和FileOutStream的使用——文件字节输入/输出流
最近又退回到java EE的学习,这篇博客就来讲解一下字节流中最重要的两个类FileInputStream和FileOutputStream的用法: FileInputStream:全称是文件字节输入 ...
- Java IO详解(一)------字节输入输出流
File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...
- Java IO详解(三)------字节输入输出流
File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...
- Java基础之文件的输入输出流操作
在介绍输入输出流之前,首先需要了解如何创建文件,创建文件夹以及遍历文件夹等各种操作,这里面不在一一介绍,主要介绍的是文件的输入输出流操作. 在起初学习文件操作之前,总是喜欢将输入输出弄混淆,后来通过看 ...
- java学习笔记IO之字节输入输出流
IO字节输入输出流 OutputStream:字节输出流 该抽象类是所有字节输出流的超类: 定义了一些共性的成员方法: 1.写入一个字节 void write(int b);//b表示字节 2.写入字 ...
- 《三》Java IO 字节输入输出流
那么这篇博客我们讲的是字节输入输出流:InputStream.OutputSteam(下图红色长方形框内),红色椭圆框内是其典型实现(FileInputSteam.FileOutStream) ...
- Java 7源码分析第13篇 - 字节输入输出流(1)
上一篇介绍了关于字节输入输出流的Java类框架,同时也简单介绍了一下各个类的作用,下面就来具体看一下这些类是怎么实现这些功能的. 1.InputStream和OutputStream InputStr ...
- Java中的字节输入出流和字符输入输出流
Java中的字节输入出流和字符输入输出流 以下哪个流类属于面向字符的输入流( ) A BufferedWriter B FileInputStream C ObjectInputStream D In ...
- Java分享笔记:使用缓冲流复制文件
[1] 程序设计 /*------------------------------- 1.缓冲流是一种处理流,用来加快节点流对文件操作的速度 2.BufferedInputStream:输入缓冲流 3 ...
随机推荐
- NLP-BM25算法理解
前两天老师给我们讲解了BM25算法,其中包括由来解释,以及算法推导,这里我再将其整理,这里我不讲解之前的BIM模型,大家有兴趣可以自行了解.Okapi BM25:一个非二值的模型bm25 是一种用来评 ...
- 【vue】在VS Code中调试Jest单元测试
在VS Code中调试Jest单元测试 添加调试任务 打开 vscode launch.json 文件,在 configurations 内加入下面代码 "configurations&qu ...
- 关于Jvm的见解(二)
栈管运行,堆管存储!!! 栈呢,也叫作栈内存,主要管java程序的运行,在线程创建时创建,生命周期和线程一致,只要线程一结束,该栈就被GC,是线程私有的.基本类型的变量和对象的引用数据类型的变量都在栈 ...
- Mysql主从同步的实现原理与配置实战
1.什么是mysql主从同步? 当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库. 2.主从同步有什么好处? 水平扩展数据库的负载能力. 容错,高可用.Failover ...
- 如何基于k8s快速搭建TeamCity(YAML分享)
前言 最近有朋友基于之前的博客<Docker最全教程之使用TeamCity来完成内部CI.CD流程(十七)>搭建TeamCity时出现了一些问题,由于平常比较忙,没有及时答复,非常抱歉. ...
- nyoj 39-水仙花数
39-水仙花数 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:35 submit:70 题目描述: 请判断一个数是不是水仙花数. 其中水仙花数定义各 ...
- 使用class关键字创建类组件、props参数
import React,{Component} from 'react' import {render} from 'react-dom' // 使用class创建组件 class Movie ex ...
- Flex实现web版图片查看器
项目需求: 在web端实现图片浏览,具有放大.缩小.滚轴放大缩小.移动.旋转以及范围控制. 成果图:
- php使用QueryList轻松采集JavaScript动态渲染页面
QueryList使用jQuery的方式来做采集,拥有丰富的插件. 下面来演示QueryList使用PhantomJS插件抓取JS动态创建的页面内容. 安装 使用Composer安装: 安装Query ...
- 2019-11-3:渗透测试,基础学习,bypass类型笔记
等价字符 空格:%20,+,(),%0a,%09,%a0,%0b,%0c,%0d,/**/等 =:like,regexp,liker,<>,! =等 and:&& or:x ...