本文共 3079 字,大约阅读时间需要 10 分钟。
FilterInputStream/FilterOutputStream和FilterReader/FilterWriter
8.1桥接转换流
InputStreamReader构造器
8.2缓冲流
缓冲流是套接在响应的节点流之上,对续写的数据提供缓冲的功能,提高读写的效率,同时增加了一些新方法
以介质是硬盘为例,字节流和字符流的弊端:在每一次读写的时候,都会访问硬盘。 如果读写的频率比较高的时 候,其性能表现不佳。为了解决以上弊端,采用缓存流。 缓存流在读取的时候,会一次性读较多的数据到缓存中,以后每一次的读取,都是在缓存中访问,直到缓存中的数 据读取完毕,再到硬盘中读取构造方法
缓冲输入流的方法
BuedReader提供了一个方法readLine():String,但是BueredInputStream中并没有这个
8.3数据流
DataInputStram和DataOutputStream分别继承自InputStream和OuputStream,属于过滤流,需要分别套接在 InputStream和OutputStream类型的节点流上
DataInputStream和DataOutputStream提供了可以存取与机器无关的Java原始类型数据的方法
DataInputSteram和DataOutputStream构造方法为8.4打印流
PrintStream和PrintWriter都属于输出流,分别针对字节和字符
PrintWriter和PrintStream都提供了重载的print和println方法用于输出多种类型数据
println表示输出后自动换行
PrintWriter(Writer)
PrintWriter(Writer out, boolean autoFlush)自动刷新----println
8.5对象流
使用DataInputStream或者DataOutputStream可以读写对象数据
读写一个对象的前提是这个类型的对象是可以被序列化的;
1、如何声明对象所属于的类可以进行序列化和反序列化Serializable/Externalizable接口
其中的接口没有任何定义,仅仅只起到了说明的作用,这种接口叫做标志接口或者旗标接口 2、可以通过ObjectInputStream【readObject():Object】和ObjectOutputStream【writeObject(Object):void】 提供的方法直接操作对象 3、输出对象4、读取对象
编码细节
1、需要通过对象流读写的对象必须实现了序列化接口,否则需要java.io.NotSerializableException
2、Serializable接口是标志接口,没有需要实现的方法,所有的序列化和反序列化操作由VM负责实现。 Externalizable接口定义为public interface Externalizable extends java.io.Serializable,这个接口中包含两个方 法需要实现writeExternal自定义实现对象的序列化,readExternal自定义实现对象的反序列化。除非特殊需求一般 不使用Externalizable接口,因为没有必要自定义
3、类型转换问题:
4、private static nal long serialVersionUID = 6889840055394511246L
如果不添加序列号,则会有警告信息,但是不是错误信息 一般选择Add generated serial version ID会生成一个在项目中永不重复的的序列版本编号 序列版本号可以不用添加,这个序列版本号是一种序列化和反序列化中快速识别类型的简单方法,比不加序列号的识 别效率高。引入的功能是如果版本号不对应,不会进行类型识别,而是直接报异常InvalidClassException5、一般针对敏感数据不应该进行序列化操作,针对不需要进行序列操作的属性可以添加一个关键字transient,表 示该属性不参与序列化和反序列化操作
6、读文件的判断:读取文件时可以通过EOFException异常来判断文件读取结束
转载地址:http://uzjki.baihongyu.com/