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)的更多相关文章

  1. Java基础—IO小结(二)缓冲流与其它流的使用

    一.缓冲流的使用 每个字节流都有对应的缓冲流: BufferedInputStream / BufferedOutputStream 构造器: 方法摘要与对应节点流类似 使用缓冲流实现文件复制:实际中 ...

  2. Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)

    Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...

  3. File类的特点?如何创建File类对象?Java中如何操作文件内容,什么是Io流Io流如何读取和写入文件?字节缓冲流使用原则?

    重难点提示 学习目标 1.能够了解File类的特点(存在的意义,构造方法,常见方法) 2.能够了解什么是IO流以及分类(IO流的概述以及分类) 3.能够掌握字节输出流的使用(继承体系结构介绍以及常见的 ...

  4. JAVA IO分析二:字节数组流、基本数据&对象类型的数据流、打印流

    上一节,我们分析了常见的节点流(FileInputStream/FileOutputStream  FileReader/FileWrite)和常见的处理流(BufferedInputStream/B ...

  5. Java 基础 IO流(转换流,缓冲)

    一,前言 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者OutputStr ...

  6. Java基础-IO流对象之字节流(Stream)

    Java基础-IO流对象之字节流(Stream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在前面我分享的笔记中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现 ...

  7. Java基础-IO流对象之随机访问文件(RandomAccessFile)

    Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...

  8. Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream)

    Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.内存 ...

  9. Java基础-IO流对象之打印流(PrintStream与PrintWriter)

    Java基础-IO流对象之打印流(PrintStream与PrintWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.打印流的特性 打印对象有两个,即字节打印流(P ...

随机推荐

  1. Bag类课后作业

    20162316 Bag课后作业 下面小标题都是码云链接 实现代码 import java.util.Arrays; public class Bag implements BagInterface ...

  2. alpha版postmortem 报告

    一.团队开发存在的问题 此次会议我们团队中每个成员都仔细思考并提出了团队在这一阶段存在的问题,主要如下: 1.前期任务规划.分配不合适: 2.个人对认领任务模块完成度.了解度不够: 3.个人学习意识. ...

  3. Oracle 的四种连接-左外连接、右外连接、内连接、全连接

      今天在看一个遗留系统的数据表的时候发现平时查找的视图是FULL OUT JOIN的,导致平时的数据记录要进行一些限制性处理,其实也可以设置视图各表为右外连接并在视图上设置各列的排序和筛选条件就可以 ...

  4. Leetcode题库——33.搜索旋转排序数组

    @author: ZZQ @software: PyCharm @file: search.py @time: 2018/11/12 18:12 要求:假设按照升序排序的数组在预先未知的某个点上进行了 ...

  5. java项目 相对路径(本项目的地址)

    File file=new File(""); String abspath=file.getAbsolutePath(); System.out.println(abspath) ...

  6. 【Coursera】应用机器学习的建议

    偏差方差权衡 使用较小的神经网络,类似于参数较少的情况,容易导致高偏差和欠拟合,但计算代价较小使用较大的神经网络,类似于参数较多的情况,容易导致高方差和过拟合,虽然计算代价比较大,但是可以通过归一化手 ...

  7. 一键轻松查看apk包名和Main Activity

    环境 Windows系统(我的是Win10 64位) Python3(我的是3.6.1) 已安装Git 安装 pip install git+https://github.com/codeskyblu ...

  8. [转帖]Beyond Compare如何进行二进制比较

    Beyond Compare如何进行二进制比较 http://www.beyondcompare.cc/jiqiao/erjinzhi-bijiao.html 在使用Beyond Compare软件比 ...

  9. UVAlive6439_Pasti Pas!

    题目是说给你一个字符串,现在要你用一些特殊的符号代替这个字符串中某一些子串,使得被替换后的串是一个回文串. 现在要你求替换后的字符串的最大的可能的长度. 其实这个题目没有什么固定的算法哦,我直接暴力就 ...

  10. C++模式学习------适配器模式

    适配器模式: 适配器模式属于结构型的设计模式,是将一个类的接口转换成使用方希望的另外一个接口,这样使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 适配器模式有两种: 1.类的适配器:继承不 ...