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                         希望要原样输出各种数据类型的值

day010-缓冲流、转换流、序列化流的更多相关文章

  1. Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)

    1.操作基本数据类型的流     1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...

  2. File类与常用IO流第十章——序列化流

    第十章.序列化流 序列化流和反序列化流概述 序列化:用一个字节序列表示一个对象,该字节序列包含该对象的数据.对象的类型和对象中存储的属性等等信息.字节序列写出到文件后,相当于文件中持久保存了一个对象的 ...

  3. EasyRTMP实现将RTSP流转换成RTMP流实现RTSP直播转RTMP直播的功能

    本文转自EasyDarwin开源团队Kim的博客:http://blog.csdn.net/jinlong0603/article/details/52951311 EasyRTMP EasyRTMP ...

  4. IO(Properties、序列化流、打印流、CommonsIO)

    第1章 Properties类 1.1 Properties类介绍 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字 ...

  5. IO流的Properties集合,序列化流与反序列化流,打印流及commons-IO

    内容介绍 Properties集合 序列化流与反序列化流 打印流 commons-IO Properties类 Properties类介绍 Properties 类表示了一个持久的属性集.Proper ...

  6. JavaProperties类、序列化流与反序列化流、打印流、commons-IO整理

    Properties类 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串. 特点: 1.Hashtable的子类 ...

  7. Properties类、序列化流与反序列化流、打印流、commons-IO

    Properties类 特点: 1.Hashtable的子类,map集合中的方法都可以用: 2.该集合没有泛型,键值都是字符串: 3.是一个可以持久化的属性集,键值可以存到集合中,也可存到持久化的设备 ...

  8. IO流之序列化流与反序列化流

    序列化流与反序列化流 用于从流中读取对象的 操作流 ObjectInputStream    称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream   称为 序列化流 l ...

  9. 序列化流与反序列化流,打印流,工具类commons-IO

    1序列化流与反序列化流 用于从流中读取对象的操作流 ObjectInputStream    称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream   称为 序列化流 特 ...

  10. java基础(25):Properties、序列化流、打印流、commons-IO

    1. Properties类 1.1 Properties类介绍 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符 ...

随机推荐

  1. POJ3322 Bloxorz I 无脑广搜(我死了。。。)

    多测不清空,爆零两行泪....我死了QWQ 每个节点3个状态:横坐标,纵坐标,和方向 说一下方向:0:立着,1:竖着躺着,上半部分在(x,y),2:横着躺着,左半部分在(x,y) 然后就有了常量数组: ...

  2. java8 方法引用与lambda

    List<String> list = new ArrayList<>(); //list.stream().filter((String s)->System.out. ...

  3. linux下忘记mysql的root密码

    一.处理方案 #1. 结束当前正在运行的mysql进程 /etc/init.d/mysql stop #2. 用mysql安全模式运行并跳过权限验证 mysqld_safe --user=mysql ...

  4. PIE SDK元素的删除

    1功能简介 元素删除是将根据需求将不符合的元素进行删除,PIE SDK支持元素的删除操作,下面对元素的删除功能进行介绍. 2功能实现说明 2.1.1 实现思路及原理说明 第一步 获取已经选择的元素 第 ...

  5. Ionic3,关于配置公共的css文件,引用非标准的文件(三)

    说明 在开发过程中,很多样式为了能够共用,这样能够节省很大一部分时间用来编写样式,同时,一个完整的共用模板,在进行样式更换的时候,可以达到事半功倍的效果,因此在开发效率上也可以获得提高. 相关步骤: ...

  6. java与C语言在字符串结束符上的区别

    综述:在C语言中字符串或字符数组最后都会有一个额外的字符‘\0’来表示结束,而在java语言中没有结束符这一概念.具体见下面分析. 1. C 语言 在C语言中字符串和字符数组基本上没有区别,都需要结束 ...

  7. Java for循环的几种用法分析

    J2SE 1.5提供了另一种形式的for循环.借助这种形式的for循环,可以用更简单地方式来遍历数组和Collection等类型的对象.本文介绍使用这种循环的具体方式,说明如何自行定义能被这样遍历的类 ...

  8. 图解CSS的padding,margin,border属性(详细介绍及举例说明)

    图解CSS的padding,margin,border属性 W3C组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落.列表.标题.图片以及层 ...

  9. 【Shell】shell的运算

    一.除法 a=12 b=7 1) expr $a / $b  计算出结果为个1 ,只支持整除 2) echo "scale=2;$a/$b" | bc结果为 1.71 3) awk ...

  10. 移动端H5页面注意事项

    1. 单个页面内容不能过多 设计常用尺寸:7501334 / 6401134,包含了手机顶部信号栏的高度. 移动端H5活动页面常常需要能够分享到各种社交App中,常用的有微信.QQ等. 使用移动设备查 ...