1 字符流的缓冲区

  • 缓冲区的出现提高了对数据的读写效率。
  • 对应的类:
    • BufferedWriter
    • BufferedReader
  • 缓冲区要结合流才能使用。
  • 在流的基础上对流的功能进行了增强。  

2 BufferedWriter

2.1 BufferedWriter简介

  • 将文本写入字符输出流,缓冲各个字符,从而提高单个字符、数组和字符串的高效写入。
  • 可以指定缓冲区的大小,或者接受默认的大小。在大多数的情况下,默认值就已经足够大了。

2.2 常用方法

2.2.1 构造方法

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

2.2.2 普通方法

  • 关闭此流,但要先刷新
public void close() throws IOException
  • 刷新该流的缓冲
public void flush() throws IOException
  • 写入一个行分隔符
public void newLine() throws IOException
  • 写入字符数组的一部分
public void write(char[] cbuf,int off,int len) throws IOException
  • 写入单个字符
public void write(int c) throws IOException
  • 写入字符串的一部分
public void write(String s,int off,int len) throws IOException

2.2.3 示例

  • 示例:
package java19;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

/**
 * 2017/10/12
 * 说明:
 */
public class BufferedWriterDemo {
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));

        bw.write("abcd");

        bw.flush();

        bw.close();

    }
}

3 BufferedReader

3.1 BufferedReader简介

  • 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
  • 可以指定缓冲区的代销,或者使用默认的大小。大多数情况下,默认值就足够大了。

3.2 常用方法

3.2.1 构造方法

  • 创建一个使用默认大小的输入缓冲区的缓冲字符输入流
public BufferedReader(Reader in)
  • 创建一个使用指定大小输入缓冲区的缓冲字符输入流
public BufferedReader(Reader in, int sz)

3.2.2 普通方法

  • 关闭该流并释放与之关联的所有资源
public void close() throws IOException
  • 标记流中的当前位置
public void mark(int readAheadLimit) throws IOException
  • 判断此流是否支持mark()操作
public boolean markSupported()
  • 读取单个字符
public int read() throws IOException
  • 将字符读取数组的某一部分
public int read(char[] cbuf, int off,int len) throws IOException
  • 读取一个文本行
public String readLine() throws IOException
  • 判断此流是否已准备好被读取
public boolean ready() throws IOException
  • 将流重置到最新的标记
public void reset() throws IOException
  • 跳过字符
public long skip(long n) throws IOException

3.2.3 示例

  • 示例:
package java19;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

/**
 * 2017/10/13
 * 说明:
 */
public class BufferedReaderDemo {
    public static void main(String[] args) throws IOException {
        BufferedReader fr = new BufferedReader(new FileReader("demo.txt"));

        char[] buffer = new char[1024];

        int len = 0;

        while((len = fr.read(buffer)) != -1){
            System.out.println(new String(buffer,0,len));
        }

        fr.close();

    }
}
  • 示例:
package java19;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

/**
 * 2017/10/13
 * 说明:
 */
public class BufferedReaderDemo {
    public static void main(String[] args) throws IOException {
        BufferedReader fr = new BufferedReader(new FileReader("demo.txt"));

        String str = null ;

        while((str = fr.readLine()) != null){
            System.out.println(str);
        }

        fr.close();

    }
}

4 练习:使用BufferedReader和BufferedWriter来完成复制文件

  • 方法①:每次读取1个字符
package java19;

import java.io.*;

/**
 * 2017/10/13
 * 说明:方法①每次读取1个字符
 */
public class BufferedWriterAndBufferedReaderDemo {
    public static void main(String[] args) throws IOException {
        BufferedReader br =  new BufferedReader(new FileReader("demo.txt"));

        BufferedWriter bw =  new BufferedWriter(new FileWriter("bw.txt"));

        int len = 0;
        while((len = br.read()) != -1){
            bw.write(len);
            bw.flush();
        }

        bw.close();
        br.close();

    }
}
  • 方法②:自定义缓冲区
package java19;

import java.io.*;

/**
 * 2017/10/13
 * 说明:方法②自定义缓冲区
 */
public class BufferedWriterAndBufferedReaderDemo {
    public static void main(String[] args) throws IOException {
        BufferedReader br =  new BufferedReader(new FileReader("demo.txt"));

        BufferedWriter bw =  new BufferedWriter(new FileWriter("bw.txt"));

        char[] buffer = new char[1024];

        int len = 0;

        while((len = br.read(buffer)) != -1){
            bw.write(buffer,0,len);
            bw.flush();
        }

        bw.close();
        br.close();

    }
}
  • 方法③:使用readLine()方法
package java19;

import java.io.*;

/**
 * 2017/10/13
 * 说明:方法③使用readLine()方法
 */
public class BufferedWriterAndBufferedReaderDemo {
    public static void main(String[] args) throws IOException {
        BufferedReader br =  new BufferedReader(new FileReader("demo.txt"));

        BufferedWriter bw =  new BufferedWriter(new FileWriter("bw.txt"));

        String line = null;
        while((line = br.readLine()) != null){
            bw.write(line);
            bw.newLine();
            bw.flush();
        }

        bw.close();
        br.close();

    }
}

5 字节流

  • 基本操作与字符流相同。
  • 字节流不仅可以操作字符,还可以操作其它媒体文件。

6 InputStream

6.1 InputStream的简介

  • 此抽象类是表示字节输入流的所有类的父类。

6.2 InputStream的构造方法

  • 默认的构造方法
public InputStream()

6.3 方法

  • 返回此输入流下一个方法调用可以不受阻塞地从此输入流读取的字节数
public int available() throws IOException
  • 关闭此输入流并释放与该流关联的所有系统资源
public void close() throws IOException
  • 在此输入流中标记当前位置
public void mark(int readlimit)
  • 判断此流是否支持mark和reset方法
public boolean markSupported()
  • 从输入流中读取数据的下一个字节
public abstract int read() throws IOException
  • 从输入流中读取一定数量的字节,并将其存储在缓冲数组中
public int read(byte[] b) throws IOException
  • 将输入流中最多len个数据字节读取byte数组
public int read(byte[] b, int off,int len) throws IOException
  • 将此流重新定位到最后一次对此输入流调用mark方法时的位置
public void reset() throws IOException
  • 跳过和丢弃此输入流中数据的n个字节
public long skip(long n) throws IOException

7 OutputSteram

7.1 OutputStream简介

  • 此抽象类是表示输出字节流的所有类的父类,输出流接收输出字节并将这些字节发送到某个接收器。

7.2 构造方法

  • 默认构造方法
public OutputStream()

7.3 方法

  • 关闭此输出流并释放与此流有关的所有系统资源
public void close() throws IOException
  • 刷新此输出流并强制写出所有缓冲的输出字节
public void flush() throws IOException
  • 将b.length个字节从指定的byte数组写入此输出流
public void write(byte[] b) throws IOException
  • 将指定byte数组中从偏移量off开始的len个字节写入此输出流
public void write(byte[] b, int off,int len) throws IOException
  • 将指定的字节写入此输出流
public abstract void write(int b)  throws IOException

8 FileInputStream

8.1 FileInputStream简介

  • FileInputStream从文件系统中的某个文件获取输入字节。哪些文件可用取决于主机环境。
  • FileInputStream用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用FileReader。

8.2 构造方法

  • 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件流通过文件系统中的File对象的file指定。
public FileInputStream(File file) throws FileNotFoundException
  • 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的路径名name来指定。
public FileInputStream(String name) throws FileNotFoundException
  • 通过文件描述符fdObj创建一个FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。
public FileInputStream(FileDescriptor fdObj)

8.3 方法

  • 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的估计剩余字节数
public int available() throws IOException
  • 关闭此文件输入流并释放与此流有关的所有系统资源
public void close() throws IOException
  • 确保在不再引用文件输入流的时候调用其close方法
protected void finalize() throws IOException
  • 返回与此文件输入流有关的唯一FileChannel对象
public FileChannel getChannel()
  • 返回表示到文件系统中实际文件的连接的FileDescriptor对象,该文件系统正被FileInputStream使用
public final FileDescriptor getFD() throws IOException
  • 从输入流中读取一个数据字节
public int read() throws IOException
  • 从输入流中将最多b.length个字节的数据读入一个byte数组中
public int read(byte[] b) throws IOException
  • 从输入流中将最多len个字节的数据读入一个byte数组中
public int read(byte[] b, int off,int len)
  • 从输入流中跳过并丢弃n个资借鉴的数据
public long skip(long n) throws IOException

9 FileOutputStream

9.1 FileOutputStream简介

  • 文件输出流是用于将数据写入File或FileDescriptor的输出流。文件是否可用或能否可用被创建取决于基础平台。特别是某些平台一次只允许一个FileOutputStream打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。
  • FilOutputStream用于写入诸如图像数据之类的原始字节的六。要写入字符流,请考虑使用FileWriter。

9.2 构造方法

  • 创建一个向指定File对象表示文件中写入数据的文件输出流
public FileOutputStream(File file) throws FileNotFoundException
  • 创建一个向指定File对象表示的文件中写入数据的文件输出流
public FileOutputStream(File file, boolean append) throws FileNotFoundException
  • 创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接
public FileOutputStream(FileDescriptor fdObj)
  • 创建一个向具有指定名称的文件中写入数据的输出文件流
public FileOutputStream(String name) throws FileNotFoundException
  • 创建一个向具有指定name的文件中写入数据的输出文件流
public FileOutputStream(String name, boolean append)  throws FileNotFoundException

9.3 方法

  • 关闭此文件输出流并释放与此流有关的所有系统资源
public void close() throws IOException
  • 清理到文件的连接,并确保在不再引用此文件输出流时调用此流的close方法
protected void finalize() throws IOException
  • 返回与此文件输出流有关的唯一FileChannel对象
public FileChannel getChannel()
  • 返回与此流有关的文件描述符
public final FileDescriptor getFD()  throws IOException
  • 将b.length个字节从指定byte数组写入到此文件输出流中
public void write(byte[] b) throws IOException
  • 将指定byte数组中从偏移量off开始的len个字节写入到此文件输出流
public void write(byte[] b,int off, int len) throws IOException
  • 将指定字节写入到此文件输出流
public void write(int b)  throws IOException

10 BufferedInputStream

10.1 BufferedInputStream简介

  • BufferedInputStream为另一个输入流添加一些功能,即缓冲输入以及支持mark和reset方法的能力。在创建BufferedInputStream时,会创建一个内部缓冲区数组。在读取或跳过流中的字节时候,可根据需要从包含的输入流再次填充到该内部缓冲区,一次填充多个字节。mark操作记录输入流中的某个点,reset操作使得从包含的输入流中获取新字节之前,再次读取最后一次mark操作后读取的所有字节。

10.2 构造方法

  • 创建一个BufferedInputStream并保存其参数,即输入流in,以便将来使用
public BufferedInputStream(InputStream in)
  • 创建一个具有指定缓冲区大小的BufferedInputStream并保存其参数,即输入流in,以便将来使用
public BufferedInputStream(InputStream in,int size)

10.3 方法

  • 返回从此输入流读取或跳过、且不受此输入流接下来的方法调用阻塞的估计字节数
public int available() throws IOException
  • 关闭此输入流并释放与该流关联的所有O系统资源
public void close() throws IOException
  • 参见InputStream的mark方法的常规协定
public void mark(int readlimit)
  • 测试此输入是否支持mark和reset方法
public boolean markSupported()
  • 参见InputStream的read方法的常规协定
public int read() throws IOException
  • 从此输入流中戈丁偏移量出开始将各字节读取到指定的byte数组中
public int read(byte[] b, int off,int len) throws IOException
  • 参见InputStream的reset方法的常规协定
public void reset() throws IOException
  • 参见InputStream的skip方法的常规协定
public long skip(long n) throws IOException

11 BufferedOutputStream

11.1 BufferedOutputStream简介

  • 该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流总,而不必针对每次字节写入调用底层系统。

11.2 构造方法

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

11.3 方法

  • 刷新此缓冲的输出流
public void flush() throws IOException
  • 将指定byte数组中从偏移量off开始的len个字节写入到此缓冲的输出流
public void write(byte[] b, int off, int len) throws IOException
  • 将指定的字节写入到此缓冲的输出流
public void write(int b) throws IOException

IO (二)的更多相关文章

  1. 图解 Java IO : 二、FilenameFilter源码

    Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter   ...

  2. java中的IO二

    java中流分为节点流和处理流,IO一中的案例都是节点流 一.处理流的使用实例 二.装饰者模式 以上BufferReader的用法就是装饰者模式 Decorator就是动态地给对象增添行为 如果要实现 ...

  3. Java基础---IO(二)--File类、Properties类、打印流、序列流(合并流)

    第一讲     File类 一.概述 1.File类:文件和目录路径名的抽象表现形式 2.特点: 1)用来将文件或文件夹封装成对象 2)方便于对文件与文件夹的属性信息进行操作 3)File类的实例是不 ...

  4. 【Go】使用压缩文件优化io (二)

    原文链接: https://blog.thinkeridea.com/201907/go/compress_file_io_optimization2.html 上一篇文章<使用压缩文件优化io ...

  5. Pipe——高性能IO(二)

    Pipelines - .NET中的新IO API指引(一) Pipelines - .NET中的新IO API指引(二) 关于System.IO.Pipelines的一篇说明 System.IO.P ...

  6. linux系统编程之文件与io(二)

    今天继续学习文件与io,话不多说,开始进入正题: 文件的read和write系统调用: 说明:函数中出现在size_t和ssize_t是针对系统定制的数据类型:     下面以一个实现文件简单拷贝的示 ...

  7. Java IO(二)

    字节流 字符流: FileReader FileWriter BufferedReader BufferedWriter 字节流: FileInputStream FileOutputStream B ...

  8. java IO(二):字节流

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  9. Java之IO(二)BufferedInputStream和BufferedOutputStream

    转载请注明源出处:http://www.cnblogs.com/lighten/p/6971234.html 1.前言 本文主要介绍输入输出流中的BufferedInputStream和Buffere ...

  10. System.IO 二

    接着上篇的来  System.IO FileSystemWatcher    指向这个签名的方法   可以监听目录发生了什么事件 例如: static void Main(string[] args) ...

随机推荐

  1. CSS列表及导航条

    大多数网页中都包含某种形式的列表,今天我们就来联系几个基本的导航条.   垂直导航条 注意要点: 去掉默认的项目符号(list-style-type:none),将外边距和内边距都设为0. 以em设置 ...

  2. 0.python class

    http://pythonprogramminglanguage.com/ 什么是python? python是一款让你工作比起用其他语言更快的编程语言.老练的程序员用其他的语言会比用python更顺 ...

  3. 使用docker+jenkins构建nodejs前端项目

    前文使用Docker搭建Jenkins+Docker持续集成环境我们已经搭建了基于docker+jenkins的持续集成环境,并构建了基于maven的项目.这一节,我们继续扩展功能,增加对Nodejs ...

  4. 算法8 五大查找之:二叉排序树(BSTree)

    上一篇总结了索引查找,这一篇要总结的是二叉排序树,又称为二叉搜索树(BSTree) . 构造一棵二叉排序树的目的,其实并不是为了排序,而是为了提高查找和插入删除的效率. 什么是二叉排序树呢?二叉排序树 ...

  5. 86、flask之一些凌乱知识点

    本篇导航: session组件 上下文与内置函数 pymysql问题 模版问题 一.session组件 1.session组件简介 flask-session是flask框架的session组件,由于 ...

  6. 使用jemeter手工编写注册、登陆脚本 运用 fiddler (三)

    手工注册脚本的录制 我们可以发现  编写手工脚本 需要用到两个软件一起合作才能编写成功 工作亦是如此  养成良好的团队合作精神 是必不可少的 现在我们来看手工编写注册脚本 第一步 :我们先进入网站首页 ...

  7. Windows10 环境下安装 ElasticSearch

    环境与版本 操作系统:windows 10 Elasticsearch 版本:6.1.1 Java 版本:9.0.1 ik 分词器版本:6.1.1 安装步骤 前置要求 操作系统中需要安装有 java ...

  8. 使用Vue快速开发单页应用

    本文所涉及代码全在vue-cnode 单页应用,即在一个页面集成系统中所有功能,整个应用只有一个页面.因为路由的控制在前端,单页面应用在页面切换时比传统页面更快,从而在前端体验更好. 将逻辑从后端转移 ...

  9. THUSC2016 游记

    浑浑噩噩地就出发了,只记得可以翘课,不知道自己要干什么去. Day 0    5点起床,到潮汕机场坐飞机.第一次坐飞机非常不爽起飞和降落时的加速度……终于还是转转地铁.动车在下午4点左右抵达目的地,西 ...

  10. Linux 文件操作命令-Linux基础环境命令学习笔记

    1.文件目录操作 1)路径识别 a.绝对路径,以根目录开始 b.相对路径,以当前目录开始,不需从根目录开始写起 2)命令 man ls 查看ls命令帮助 cd /var/log 切换进入log目录(. ...