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 ...
随机推荐
-
JS原型的问题Object和Function到底是什么关系
var F = function(){}; Objcert.prototype.a = function(){}; Function.prototype.b = function(){}; F 既能访 ...
-
PAT乙级真题1008. 数组元素循环右移问题 (20)
原题: 1008. 数组元素循环右移问题 (20) 时间限制400 ms内存限制65536 kB 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M&g ...
-
常见CSS注意问题
1. 初始化css 有哪些 因 为浏览器的品种很多,每个浏览器的默认样式也是不同的,比如<button>标签,在IE浏览器.Firefox浏览器以及Safari浏览 器中的样式都是不同的, ...
-
android111 java中调用c代码
MainActivity: package com.itheima.helloworld1; import android.os.Bundle; import android.app.Activity ...
-
Linux下进程的文件访问权限
本文转自 http://blog.csdn.net/chosen0ne/article/details/10581883 对进程校验文件访问权限包括两个部分,一是确定进程的角色(属于哪个用户或者组), ...
-
android学习11——Handler,Looper,MessageQueue工作原理
Message是Handler接收和处理的消息对象. 每个线程只能拥有一个Looper.它的loop方法读取MessageQueue中的消息,读到消息之后就把消息交给发送该消息的Handler进行处理 ...
-
【css】盒子模型 之 弹性盒模型
参考: http://caibaojian.com/flexbox-guide.html 待补充啊
-
Bootstrap方法之--排版、代码
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...
-
七、PyQT5控件——QSlider,QSpinBox
一.Qslider QSlider是一个滑动条,可以设置成水平或垂直放置.最常用的方法允许用户在某一范围内互动该滑块,并将滑块的位置转换成一个整数值(int类型),这种方式可以在某一个范围内平顺的变动 ...
-
关于STL容器
容器: 概念:如果把数据看做物体,容器就是放置这些物体的器物,因为其内部结构不同,数据摆放的方式不同,取用的方式也不同,我们把他们抽象成不同的模板类,使用时去实例化它 分类: 序列容器.关联容器.容器 ...