Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)
Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
在我们学习字节流与字符流的时候,大家都进行过读取文件中数据的操作,读取数据量大的文件时,读取的速度会很慢,很影响我们程序的效率,那么,我想提高速度,怎么办?Java中提高了一套缓冲流,它的存在,可提高IO流的读写速度
缓冲流,根据流的分类分为字节缓冲流与字符缓冲流。本篇博客主要介绍的是字节缓冲流。
一.字节缓冲流
字节缓冲流根据流的方向,共有2个:
1>. 写入数据到流中,字节缓冲输出流 BufferedOutputStream
2>.读取流中的数据,字节缓冲输入流 BufferedInputStream
它们的内部都包含了一个缓冲区,通过缓冲区读写,就可以提高了IO流的读写速度
二.字节输出缓冲流
java.io.BufferedOutputStream作用:提高原有输出流的写入效率。

/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class BufferedOutputStreamDemo {
public static void main(String[] args) throws IOException {
//创建字节输出流,绑定文件
FileOutputStream fos = new FileOutputStream("yinzhengjie.txt");
//创建字节输出流缓冲流对象,构造方法中,传递字节输出流,实这里也可以直接匿名生成。
BufferedOutputStream bos = new BufferedOutputStream(fos);
//写入一个字节
bos.write(97);
//将字符串变成字节数组
byte[] buf = "yinzhengjie".getBytes();
//写一个字节数组
bos.write(buf);
//写入字节数组的一部分
bos.write(buf, 3, 5);
//释放资源,我们不用关闭fos对象,因为关闭bos对象会自动关闭fos流。
bos.close();
}
}

三.字节输入缓冲流

java.io.BufferedInputStream作用:提高原有输入流的读取效率。
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException; public class BufferedInputStreamDemo {
public static void main(String[] args) throws IOException {
//创建字节输入流,包装文件
FileInputStream fis = new FileInputStream("yinzhengjie.txt");
//创建字节输入流缓冲流对象,构造方法中包装字节输入流,包装文件
BufferedInputStream bis = new BufferedInputStream(fis);
//按照字节数组的方式进行读取操作,此处我并没有按照单个字节方式进行读取。
byte[] buf = new byte[4096];
int len;
while(( len = bis.read(buf)) != -1 ) {
System.out.println(new String(buf,0,len));
}
//释放资源,此处还是不用关闭fis流对象。
bis.close();
}
} /*
以上代码执行结果如下:
ayinzhengjiezheng
*/
四.四种文件复制方式的效率比较
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class CopyFile {
public static void main(String[] args) throws IOException { long start = System.currentTimeMillis();
// copy1(new File("yinzhengjie.sql"),new File("yinzhengjie.sql.backup"));
// copy2(new File("yinzhengjie.sql"),new File("yinzhengjie.sql.backup"));
// copy3(new File("yinzhengjie.sql"),new File("yinzhengjie.sql.backup")); //
copy4(new File("yinzhengjie.sql"),new File("yinzhengjie.sql.backup")); ////拷贝的是600M的文件只需要862毫秒,效率是最高的!(固态硬盘)
long stop = System.currentTimeMillis();
System.out.println(stop-start);
} //1>.字节流读写单个字符。
public static void copy1(File src,File dest) throws IOException{
FileInputStream fis = new FileInputStream(src);
FileOutputStream fos = new FileOutputStream(dest);
int len;
while( (len = fis.read()) != -1) {
fos.write(len);
}
fos.close();
fis.close();
} //2>.字节流读写字节数组
public static void copy2(File src,File dest) throws IOException{
FileInputStream fis = new FileInputStream(src);
FileOutputStream fos = new FileOutputStream(dest);
byte[] cache = new byte[1024];
int len = 0;
while( (len = fis.read(cache)) != -1) {
fos.write(cache, 0, len);
}
fos.close();
fis.close();
} //字节流缓冲区读取单个字符
public static void copy3(File src,File dest) throws IOException{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest)); int len = 0;
while( (len = bis.read()) != -1 ) {
bos.write(len);
}
bos.close();
bis.close();
} //字节流缓冲区读取字符数组
public static void copy4(File src,File dest) throws IOException{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest));
byte[] cache = new byte[1024];
int len;
while((len = bis.read(cache)) != -1 ) {
bos.write(cache, 0, len);
}
} }
Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)的更多相关文章
- Java基础—IO小结(二)缓冲流与其它流的使用
一.缓冲流的使用 每个字节流都有对应的缓冲流: BufferedInputStream / BufferedOutputStream 构造器: 方法摘要与对应节点流类似 使用缓冲流实现文件复制:实际中 ...
- Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)
Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...
- File类的特点?如何创建File类对象?Java中如何操作文件内容,什么是Io流Io流如何读取和写入文件?字节缓冲流使用原则?
重难点提示 学习目标 1.能够了解File类的特点(存在的意义,构造方法,常见方法) 2.能够了解什么是IO流以及分类(IO流的概述以及分类) 3.能够掌握字节输出流的使用(继承体系结构介绍以及常见的 ...
- JAVA IO分析二:字节数组流、基本数据&对象类型的数据流、打印流
上一节,我们分析了常见的节点流(FileInputStream/FileOutputStream FileReader/FileWrite)和常见的处理流(BufferedInputStream/B ...
- Java 基础 IO流(转换流,缓冲)
一,前言 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者OutputStr ...
- Java基础-IO流对象之字节流(Stream)
Java基础-IO流对象之字节流(Stream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在前面我分享的笔记中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现 ...
- Java基础-IO流对象之随机访问文件(RandomAccessFile)
Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...
- Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream)
Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.内存 ...
- Java基础-IO流对象之打印流(PrintStream与PrintWriter)
Java基础-IO流对象之打印流(PrintStream与PrintWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.打印流的特性 打印对象有两个,即字节打印流(P ...
随机推荐
- Alpha阶段展示报告
一.团队成员简介与个人博客地址 江昊,项目经理 http://www.cnblogs.com/haoj/ 王开,后端开发 http://www.cnblogs.com/wk1216123/ 王春阳,后 ...
- 《UML大战需求分析》-读后感一
UML英文全拼是unified modeling language 就是统一建模语言. UML就是一种软件开发中帮助我们设计的标准,虽然说是建模语言但是它是图形,图形能更清楚的表达我们对软件的想法.U ...
- 安装AndroidJDK的坑
最近公司要用weex了,先开始搭一下环境,真的都是坑,写下来大家引以为鉴,我踩坑三天的后果. 首先要安装JavaJDK这个过程就不写了都是程序员网上搜索一下很多,注意找论坛上最新的帖子来看,这里有一个 ...
- Leetcode题库——1.两数之和
@author: ZZQ @software: PyCharm @file: addTwoNumbers.py @time: 2018/9/18 10:35 要求:给定两个非空链表来表示两个非负整数. ...
- BloomFilter——大规模数据处理利器(爬虫判重)
http://www.cnblogs.com/heaad/archive/2011/01/02/1924195.html Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快 ...
- HDU 3853 LOOPS 期望dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3853 LOOPS Time Limit: 15000/5000 MS (Java/Others)Me ...
- 团队作业7——第二次项目冲刺(Beta版本12.09——12.10)
1.当天站立式会议照片 本次会议在5号公寓3楼召开,本次会议内容:①:熟悉每个人想做的模块.②:根据项目要求还没做的完成. 2.每个人的工作 经过会议讨论后确定了每个人的分工 组员 任务 陈福鹏 倒计 ...
- linux的桌面介绍
一:linux桌面环境 1. X Windows桌面环境 X Windows软件是图形显示的核心部分,是直接和PC上的显卡及显示器打交道的底层程序,它控制着linux程序如何在电脑上显示出漂亮的窗口和 ...
- D3.js 入门学习(二) V4的改动
//d3.scan /* 新的d3.scan方法对数组进行线性扫描,并根据指定的比较函数返回至少一个元素的索引. 这个方法有点类似于d3.min和d3.max. 而d3.scan可以得到极值的索引而不 ...
- 每个Android开发者必须知道的内存管理知识
原文:每个Android开发者必须知道的内存管理知识 拷贝在此处,以备后续查看. 相信一步步走过来的Android从业者,每个人都会遇到OOM的情况.如何避免和防范OOM的出现,对于每一个程序员来说确 ...