IO缓冲流

缓冲流也叫高效流,能够更高效的进行读取;

转换流:能够进行编码转换

序列化流:持久化存储对象

缓冲流

缓冲流--就是对应4个File**** 流的增强流

字节缓冲流:BufferedInputStream,BufferedOutputStream

字符缓冲流:BufferedReader,BufferedWriter

基本原理

缓冲流在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区的读写,减少系统IO次数,从而提高读写的效率

字节缓冲流

BufferedInputStream

构造方法

BufferedInputStream(InputStream in)

创建一个 BufferedInputStream并保存其参数,输入流 in ,供以后使用。

BufferedInputStream(InputStream in, int size)

创建 BufferedInputStream具有指定缓冲区大小,并保存其参数,输入流 in ,供以后使用。

BufferedInputStream 的方法

int available()

返回从该输入流中可以读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。

void close()

关闭此输入流并释放与流相关联的任何系统资源。

void mark(int readlimit)

见的总承包 mark的方法 InputStream 。

boolean markSupported()

测试这个输入流是否支持 mark和 reset方法。

int read()

见 read法 InputStream的一般合同。

int read(byte[] b, int off, int len)

从给定的偏移开始,将字节输入流中的字节读入指定的字节数组。

void reset()

见 reset法 InputStream的一般合同。

long skip(long n)

见 skip法 InputStream的一般合同。

示例:

/**
* bufferedInputStream的使用步骤
* 1.创建bufferedInputStream对象,并在构造方法中传入InputStream
* 2.使用bufferedInputStream对象的read()方法读取数据
* 3.释放资源
*/
static void bufferedInputStream() { try (
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("./src/JavaCore/IO/BOS.txt"), 1024)
) {
int len;
byte[] bytes = new byte[1024];
while ((len = bis.read(bytes)) != -1) {
System.out.println(new String(bytes, 0, len));
}
} catch (IOException E) {
System.out.println(E);
}
}

BufferedOutputStream

构造方法

BufferedOutputStream(OutputStream out)创建一个新的缓冲输出流,以将数据写入指定的底层输出流。

BufferedOutputStream(OutputStream out, int size)创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流。

方法:

intavailable()返回从该输入流中可以读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。

voidclose()关闭此输入流并释放与流相关联的任何系统资源。

voidmark(int readlimit)见的总承包 mark的方法 InputStream 。

booleanmarkSupported()测试这个输入流是否支持 mark和 reset方法。

intread()见 read法 InputStream的一般合同。

intread(byte[] b, int off, int len)从给定的偏移开始,将字节输入流中的字节读入指定的字节数组。

示例:

/**
* bufferedOutputStream的使用步骤
* 1.创建bufferedOutputStream对象,并在构造方法中传入OutputStream
* 2.使用bufferedOutputStream的write()方法将数据写入缓冲区
* 3.flush()将缓冲区的数据刷入文件
* 4.关闭流
*/
static void bufferedOutputStream() {
//这里使用的JDK7的新特性,在try中new 流对象,使用完后自动关闭
try (
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("./src/JavaCore/IO/BOS.txt"), 1024)
) {
bos.write("这是一个昂扬的时代,同时充满了悲伤的故事".getBytes());
} catch (IOException e) {
System.out.println(e);
}
}

字符缓冲流

buffredReader

buffredReader--继承关系java.lang.Objec<-java.io.Write<-rjava.io.BufferedWriter

构造方法:

BufferedWriter(Writer out)创建使用默认大小的输出缓冲区的缓冲字符输出流。

BufferedWriter(Writer out, int sz)创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。

所以buffredReader的使用和Writer的方法基本一致,但buffredReader是需要传入一个writer对象,同时在buffredReader的方法中有一个新方法就是:

public void newLine()
throws IOException写一行行分隔符。 行分隔符字符串由系统属性line.separator定义,并不一定是单个换行符('\ n')字符。

newLine()直接调用系统的line.separator定义。

bufferedReader

bufferedReader--继承关系:

java.lang.Object<-java.io.Reader<-java.io.BufferedReader

构造方法:

BufferedReader(Reader in)创建使用默认大小的输入缓冲区的缓冲字符输入流。

BufferedReader(Reader in, int sz)创建使用指定大小的输入缓冲区的缓冲字符输入流。

bufferedReader构造方法中传入Reader对象,然后方法使用也基本和reader一致,但有一个独有方法:

public String readLine() throws IOException

读一行文字。 一行被视为由换行符('\ n'),回车符('\ r')中的任何一个或随后的换行符终止。

返回所读取行的内容,如果已经到达流的末尾则为null

本博客为Swagger-Ranger的笔记分享,文章会持续更新

文中源码地址: https://github.com/Swagger-Ranger

欢迎交流指正,如有侵权请联系作者确认删除: liufei32@outlook.com

IO缓冲流的更多相关文章

  1. Java文件与io——缓冲流

    对文件或其它目标频繁的读写操作,效率低,性能差. 使用缓冲流的好处,能够更高效的读写信息,原理是将数据先缓冲起来,然后一起写入或者读取出来. BufferedInputStream:为另一个输入流添加 ...

  2. 10.4 缓冲流 BufferedReader & BufferedWriter & 缓冲流特殊功能readLine

    缓冲流和正常流的使用大致相同,缓冲流效率更高. package day10_io_fileWrite_Read.buffer_stream; import java.io.*; /* * Buffer ...

  3. Java基础知识强化之IO流笔记41:字符流缓冲流之复制文本文件案例02(使用 [ newLine() / readLine() ] )(重要)

    1. 使用字符流缓冲流的特殊功能 [ newLine() / readLine() ] 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中  数据源: a.txt -- 读取数据 ...

  4. Java基础知识强化之IO流笔记40:字符流缓冲流之特殊功能 [ newLine() / readLine() ]

    1. 字符缓冲流的特殊方法 BufferedWriter: public void newLine():根据系统来决定换行符 BufferedReader: public String readLin ...

  5. Java基础知识强化之IO流笔记39:字符流缓冲流之复制文本文件案例01

    1. 字符流缓冲流之复制文本文件案例 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中 数据源: a.txt -- 读取数据 -- 字符转换流 -- InputStreamRe ...

  6. Java基础知识强化之IO流笔记38:字符流缓冲流之BufferedWriter / BufferedReader使用

    1. 字符流缓冲流: 字符流为了高效读写,也提供了对应的字符缓冲流. BufferedWriter:字符缓冲输出流 BufferedReader:字符缓冲输入流 2. BufferedWriter使用 ...

  7. java的 IO流之缓冲流(转载)

    java缓冲流本身不具IO功能,只是在别的流上加上缓冲提高效率,像是为别的流装上一种包装.当对文件或其他目标频繁读写或操作效率低,效能差.这时使用缓冲流能够更高效的读写信息.因为缓冲流先将数据缓存起来 ...

  8. Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

    Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...

  9. Java IO流之【缓冲流和文件流复制文件对比】

    与文件流相比,缓冲流复制文件更快 代码: package Homework; import java.io.BufferedOutputStream; import java.io.File; imp ...

随机推荐

  1. mysql数据库之表与表之间的关系

    表1 foreign key 表2 则表1的多条记录对应表2的一条记录,即多对一 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录 ...

  2. etcd命令

    etcdctl支持下面列出来的命令,基本上可以分为数据库操作和非数据库操作,可以查看etcdctl README.md来了解更多 ➜ ~ etcdctl -hNAME: etcdctl - A sim ...

  3. strust2.2.3版本启动报错struts-plugin.xml:8:162

    我用的是struts-2.2.3,开始把全部的jar包都放进去了,可是一直报 信息: Parsing configuration file [struts-plugin.xml] 2011-6-11 ...

  4. CSDN优秀博客连接,博客之星连接。

    点击链接 获得[红杏出墙]插件,FQ上网无压力!谷歌搜索无压力! 2013年度CSDN十大博客之星 TOP 作者 专注领域 博客地址 邹晓艺 机器学习及算法 zouxy09 2 王然 潜在的集大成者 ...

  5. badblocks 检查磁盘损坏的区块

    Linux badblocks命令用于检查磁盘装置中损坏的区块. 语法: badblocks [-svw][-b <区块大小>][-o <输出文件>][磁盘装置][磁盘区块数] ...

  6. hadoop2.6.0完全分布式部署

    这里是hadoop最小的配置,也就是修改最少量的东西让hadoop跑起来. 系统是 Centos6.7 64位, hadoop是2.6.0,虚拟机是VMWare WorkStation 假设虚拟机启动 ...

  7. 7. IIS短文件/文件夹漏洞(汇总整理)

    漏洞的成因与分析: 1)利用“~”字符猜解暴露短文件/文件夹名. 2).Net Framework的拒绝服务攻击. 现在看大部分的分析讨论都是第一个的.第二个比较少.这里简单复述一下其他研究人员的分析 ...

  8. URAL 2021 Scarily interesting! (贪心+题意)

    题意:给定两个队伍的每个人的得分,让你安排怎么比赛才能使得观众知道冠军的时间最长. 析:贪心,很简单,就是先开始总分高的先出最差劲的,总分低的先出最厉害的,这个题当时实在是读的不明白啊,WA了好多次. ...

  9. C#事件2

    今天又来说一下C#中的事件,为什么会有这个又呢?一个是因为以前写过一篇关于事件的东西,二来呢是因为感觉接口这个东西完全可以替换委托来写事件.因为这两个方面的原因,重新过了一遍C#中的事件. 事件这个东 ...

  10. C#对图片进行切割

    C#实例代码: /// <summary> /// 切割图片 /// </summary> /// <param name="sourceBitmap" ...