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 ...
随机推荐
- 任务看板-Monday
工作照
- 【贪心算法】POJ-1017
一.题目 Description A factory produces products packed in square packets of the same height h and of th ...
- Request[""]接收的值有逗号(,)
这是因为你的前台页面有连个标签的name值相等导致的.Request["name"]其实是通过name值或得标签的value值的. 所以一般情况下name值不要相等. 需要互斥的就 ...
- springboot maven
更多信息请从官网获取https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE 1.parent基于自己项目而非spring-boot-starter- ...
- 6/5 sprint2 看板和燃尽图的更新
- #Leetcode# 451. Sort Characters By Frequency
https://leetcode.com/problems/sort-characters-by-frequency/ Given a string, sort it in decreasing or ...
- PAT 1069 微博转发抽奖
https://pintia.cn/problem-sets/994805260223102976/problems/994805265159798784 小明 PAT 考了满分,高兴之余决定发起微博 ...
- java 自定义异常的回顾
一.异常的分类: 1.编译时异常:编译时被检测的异常 (throw后,方法有能力处理就try-catch处理,没能力处理就必须throws).编译不通过,检查语法(其实就是throw和throws的配 ...
- [Oracle] 11.2.0.1 的客户端无法连接12.2.0.1 的DB端 28040
最近有一个应用服务器安装上了 11.2.0.1 的oracle DB端 又想当 客户端用来 注册 oracle12.2.0.1的DB端发现不行 但是很奇怪 报的错误竟然是 ora 01017 密码错误 ...
- Subsets II - LeetCode
目录 题目链接 注意点 解法 小结 题目链接 Subsets II - LeetCode 注意点 有重复的数字 数组可能是无序的,要先排序 解法 解法一:递归,只需要在Subsets中递归写法的基础上 ...