1.     缓冲流

又称为高效流。高效流高效的原理:使用缓冲区(数组)临时存储多个数据,减少底层资源的调用次数。从而提高读写速度。

1.1 缓冲流分类

字节缓冲流:

BufferedOutputStream

BufferedInputStream

字符缓冲流:

BufferedWriter

BufferedReade

r

1.2字节缓冲输出流

BufferedOutputstram

1.2.1 构造方法

public BufferedOutputStream(OutputStream out)

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

1.2.2 BufferedOutputStream类成员方法

Write方法:输出一个字节,输出一个字节数据,输出字节数组的一部分

利用字节缓冲输出流输出数据不是直接输出到目标文件中,而是先存储内部的的缓冲区数组中,直到缓冲区满了或调用了flush或close方法,才会将缓冲区的数据输出到目标文件中。

1.3 字节缓冲输出流BufferedInputstream

根据字节输入流对象创建字节缓冲输入流。

目前可以传递的字节输入流对象:FileInputStream

传递谁就提高谁的效率

1.3.1 BufferedInputStream类成员方法

read:读一个字节,读一个字节数组

1.4注意事项

利用字节缓冲输入流读取数据时不是直接从目标文件中读取,而是从缓冲区中读取,如果缓冲区没有内容或缓冲区的内容已经读完了,就会通过字节输入流从目标目标文件中读取数据。

1.5 BufferedWriter类

字符输出缓冲流

根据字符输出流创建缓冲区

传递谁就提高谁的效率

1.5.1 BufferedWriter构造方法

BufferedWriter(Writer writer)

1.5.2 BufferedWriter常用方法

Write:一次输出一个字符、字符串
       newline():特有方法,换行

1.6 BufferedReader类

字符缓冲输入流

1.6.1
BufferedReader常用方法

read 方法:一次读取一个字符,一个字符数组,字符数组的一部分

readLine():读取一行数据

2.转换流

2.1转换流分类

OutputStreamWriter

InputStreamReader

转换流本质就是字符流,也是只能操作文本文件。

2.2为什么需要转换流

因为FileReader或BufferedReader读取数据时只能使用默认的码表,不能修改。

文本文件的编码方式不是默认编码(utf-8),使用FileReader或BufferedReader读取数据,就会出现乱码。

2.3 InputStreamReader

作用:是字节流通向字符流的桥梁。

2.3.1
构造方法

InputStreamReader(InputStream in)   //根据字节输入流创建字符转换输入流对象

默认使用的是utf-8码表

public InputStreamReader(InputStream in,
String charsetName)

in:可以传递的字节输入流FileInputStream、BufferedInputStream

charsetName:指定码表名称,常用码表名称:utf-8,gbk

2.3.2 成员方法

read方法:读一个字符,一个字符数组

2.3.4 字符转换输入流转换过程

先有字符输入流从目标文件中读取数据,读到的是一对二进制数据,然后将读取到的二进制数据交给字符转换输入流,有字符转换输入流查询对应的码表得到对应的字符

2.4 OutputStreamWriter类

继承Writer,本质是字符输出流。只能操作文本文件。用法和FileWriter和BufferedReader,区别在该类可以指定码表输出数据。

2.4.1常用构造方法

    public
OutputStreamWriter(OutputStream out, String charsetName)

2.4.2 OutputStreamWriter转换过程

先由字符转换输出流将字符查询对应的码表,得到对应的二进制数据,然后将二进制数据交给字节输出流输出到目标文件中。

3.对象流

对象流又称为序列化流

3.1对象序列化概述

直接将对象以流的形式保存到文件中的过程则称为对象的序列。

要实现对象的序列化操作需要使用流:ObjectOutputStream

3.2对象反序列化概述

将对象数据从文件中读取出来的过程则称为对象的反序列化

要实现对象的饭序列化操作需要使用流:ObjectInputStream

3.3对象流的分类

对象输出流:ObjectOutputStreamè对象序列化

对象输入流:ObjectInputStreamè对象反序列化

3.4构造方法

       public ObjectOutputStream(OutputStream out)    
            实现对象的序列化
 
      public ObjectInputStream​(InputStream in)
            实现对象的反序列化
    3.5常用方法
        public final void writeObject(Object obj)
           将指定的对象写入ObjectOutputStream
 

public Object readObject();  从流关联的目标文件中读取对象

 

3.6 Serializable接口概述

是一个标记性接口.只有实现了该接口的类对象才可以序列化到文件中

    注意事项:
     (a)被序列化的对象要实现Serializable接口。
     (b)对象序列化只会序列化对象的信息,不能序列化类的信息。
 
    3.7 Transient关键字概述
Transient的中文翻译是瞬时。用来修饰成员变量,能够保证该成员变量的值不被序列化到文件中
      3.7.1 Transient关键字格式
          修饰符 Transient 数据类型 变量名
 
    3.8序列号冲突的解决方案
      解决方法:自定义序列号,自己提供一个固定值的序列号。
   原因:类一定实现了Serializable接口,每次编译生成class文件时,都会随机关联一个序列号
  3.8.1 固定序列号的例子

private static final long serialVersionUID = 1478652478456L;

这样每次编译类时⽣生成的serialVersionUID值都是固定的

4.打印流

该类能够方便地打印各种数据类型的值,是一种便捷的输出方式

5. 小结

5.1字符流小结

5.1.1字符输入流Reader

FileReader  非缓冲流,效率低,不可以修改码表

BufferedReader 缓冲流,效率高,不可以修改码表

InputStreamReader   转换流,可以修改码表

5.1.2字符输出流Writer

FileWriter   非缓冲流,效率低,不可以修改码表

BufferedWriter   缓冲流,效率高,不可以修改码表

OutputStreamWriter 转换流,可以修改码表

5.1.3字符流的选择

如果需要修改码表,则只能选择InputStreamReader和OutputStreamWriter

如果不需要修改码表,则推荐使用BufferedReader和BufferedWriter

5.2字节流小结

5.2.1字节输入流InputStream

FileInputStream            非缓冲流

BufferedInputStream    缓冲流,效率高,推荐使用

ObjectInputStream       对象流,要读取自定义对象时使用

5.2.2字节输出流OutputStream

FileOutputStream                非缓冲流

BufferedOutputStream        缓冲流,效率高,推荐使用

ObjectOutputStream           对象流,要读取自定义对象时使用

PrintStream                         希望要原样输出各种数据类型的值

最新文章

  1. Struts 2 数据校验要用到的类和两种校验方式以及一些校验问题的解决
  2. jquery使用注意点以及建议
  3. cuda计算的分块
  4. comet在asp.net中的实现
  5. CSS3 3D骰子
  6. fopen()和fclose()的用法
  7. Codeforces 271 Div 2 A Keyboard
  8. X-Japan
  9. Go循环引用问题
  10. [转]JavaScript作用域安全构造函数
  11. 洛谷 U3178 zty的冒险之行
  12. druid报异常 “sql injection violation, part alway true condition not allow”的解决方案
  13. Servlet和JSP读书笔记(一)
  14. javascript核心概念——new
  15. C#码农的大数据之路 - HDP SandBox配置及VS连接.md
  16. 导出EXCEL遇到问题
  17. Linux权限分析
  18. PPT基础教程
  19. 软件开发:网站&视频&书籍&文章推荐(不断更新)
  20. linux 查看并对外开放端口(防火墙拦截处理)

热门文章

  1. LeetCode119.杨辉三角 II
  2. Linux 安装 Djiango
  3. c# IList.ToList()后更改元素值会不会影响原列表的值
  4. 【研究】CVE-2017-11882-Office远程代码执行漏洞复现
  5. Home Web Server 1.9.1 build 164 - CGI Remote Code Execution复现
  6. maven的resources插件
  7. linux的运行模式
  8. java多线程-Thread
  9. jQuery遍历祖先元素:parentsUntil
  10. opensuse install oracle 11gR2 Error in invoking target 'agent nmhs' of makefile '../ins_emagent.mk'