从零开始的Java再学习-DAY9

IO流

1.缓冲流概述

1.缓冲流就是IO流的增强版,也是2个字符流2个字节流;

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

2.构造方法

1.public class BufferedOutputStream extends FilterOutputStream该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用,使用步骤和字节流基本一样,只是第二步多了创建该方法对象,把字节流传进来;

2.public class BufferedInputStream extends FilterInputStreamA BufferedInputStream为另一个输入流添加了功能,即缓冲输入和支持mark和reset方法的功能。 当创建BufferedInputStream时,将创建一个内部缓冲区数组。 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次有多个字节。 mark操作会记住输入流中的一点,并且reset操作会导致从最近的mark操作之后读取的所有字节在从包含的输入流中取出新的字节之前重新读取,使用步骤同上;

3.public class BufferedReader extends Reader从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。
可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途,它的void readLine() 表示读一行文本,没有文本返回null;

4.public class BufferedWriter extends Writer将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入。 可以指定缓冲区大小,或者可以接受默认大小。 默认值足够大,可用于大多数用途。newLine() 表示写一行行分隔符;

3.转换流

1.通过字符集进行文本的解码(字节->字符)和编码(字符->字节),需要注意编码和解码要用同一字符集,不然乱码(因为FileReader/Writer默认读取系统软件的编码);

2.字符集有ASCII,GBK,Unicode(UTF-8最常用);

3.转换流为解决编码集不统一造成乱码而出现的,In(Out)putStreamReader(Writer)是从字节流到字符流的桥:它读取字节,并使用指定的charset将其解码(编码)为字符 。 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集;

4.序列化流

1.把对象(需要继承Serializable接口)以流的形式写入到文件中保存;

2.ObjectOutputStream将Java对象的原始数据类型和图形写入OutputStream。 可以使用ObjectInputStream读取(重构)对象。 可以通过使用流的文件来实现对象的持久存储。 如果流是网络套接字流,则可以在另一个主机上或另一个进程中重构对象;

3.ObjectInputStream反序列化先前使用ObjectOutputStream编写的原始数据和对象。ObjectOutputStream和ObjectInputStream可以分别为与FileOutputStream和FileInputStream一起使用的对象图提供持久性存储的应用程序。 ObjectInputStream用于恢复先前序列化的对象。 其他用途包括使用套接字流在主机之间传递对象,或者在远程通信系统中进行封送和解组参数和参数;

5.transient关键字

1.它为瞬态关键字,它和静态修饰的变量一样不可被序列化和反序列化;

2.InvalidClassException异常是由于修改了属性的修饰词,比如私有改成公有,这是由于序列化时生成的UID不一致导致的,只要在对象类那里添加一个final修饰的serialVersionUID即可;

6.打印流

1.System.out.print中的out就是打印流,它是在PrintStream包里,它只负责输出,不抛出IO异常;

2.new一个PrintStream类对象,调用write对象会调用编码表;

3.System.setOut()可把输出语句的目的地改变为打印流的目的地;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值