IO流

对象流:
有的时候,我们可能需要将内存中的对象持久化到硬盘上,或者将硬盘中的对象信息读到内存中,这个时候我们需要使用对象输入输出流
序列化: 是对象转换成一个字节序列的过程,是一个写操作
反序列化: 一个字节序列转换成对象的过程 ,是一个读操作
ObjectOutputStream
构造器:
ObjectOutputStream(OutputStream out)
创建一个指定字节输出流的对象输出流对象。
常用方法: 除了提供了一些基本数据类型的写方法外,还提供了
void writeObject(Object obj)
将内存中的对象持久化到硬盘上

ObjectIntputStream
ObjectIntputStream(OutputStream out)
创建一个指定字节输入流的对象输入流对象
常用方法: 除了提供了一些基本数据类型的读方法外,还提供了
Object readObject();
从硬盘上读取一个字节序列,转换成对象

Serializable:序列化接口
如果想将对象序列化,那么对象的类型必须实现此接口。此接口内什么都没有,只是一个序列化标识。

serialVersionUID:
每个能序列化的对象,在被序列化时,系统会默认给此对象的类计算一个
序列化版本号。不同的平台默认提供的序列化版本号多数情况下不会相同。
因此当我们反序列时,如果硬盘里存储的对象的版本号与当前设计的类型
的版本号不一致。会出现运行时异常:
java.io.InvalidClassException,这种情况叫不兼容问题。 如果我们想解决不兼容问题。我们应该手动提供版本号。尽可能的相同 这样来解决不兼容问题
另外一种情况:
序列化过后,可能会修改类型,如果使用系统默认提供的
版本号,在反序列时,会有异常,如果手动提供,不出现异常
多出来的成员变量,以默认值的形式,赋值给反序列化回来的对象。
transient:成员变量的一个修饰词,可以理解为瘦身。
有的时候,在序列化对象时,我们不需要将对象的某些成员变量
值持久化到硬盘上(因为不重要),此时,我们可以在这些成员变量
前添加修饰词transient(保存时,进行减肥)

字符流:
在输出输入操作时,以字符为单位进行操作,默认是unicode编码集
字符流的抽象父类分别是
Writer/Reader
Writer提供了字符输出流的常用方法
void close():关闭
void write(char[] cbuf):写一个字符数组
void write(char[] cbuf, int off, int len)
写一个字符数组的一部分
write(int c):写一个字符
write(String str):写一串字符
write(String str, int off, int len)
写字符串的一部分
Reader提供了字符输入流的常用方法
int read():读一个字符,存储到int的低16位
int read(char[] cbuf):将数据读进字符数组中,返回的是读取的有效字符个数
int read(char[] cbuf, int off, int len)
将字符读入数组的一部分。
子类中转换流:
OutputStreamWriter:
将字符转换成字节写出到硬盘上
构造器:
OutputStreamWriter(OutputStream out)
创建一个指定字节输出流的字符输出流对象,采用的是系统默认的编码集
OutputStreamWriter(OutputStream out, Charset cs)
OutputStreamWriter(OutputStream out, CharsetEncoder enc)
OutputStreamWriter(OutputStream out, String charsetName)
创建一个指定字节输出流的字符输出流对象,采用指定编码集。
write(int a);
当a的低16位,如果被设计成相应的字符时,如果两个字节都是
有效字节,会写出两个。如果低16位对应是无效字符,或是有效
字节只有一位时,会写一个字节。
InputStreamReader()
将字节转换成字符读进程序中
构造器:
InputStreamReader(InputStream in)
创建一个使用默认字符集的InputStreamReader。
InputStreamReader(InputStream in, Charset cs)
InputStreamReader(InputStream in, CharsetDecoder dec)
InputStreamReader(InputStream in, String charsetName)
创建一个使用指定字符集的InputStreamReader。
缓冲流:
PrintWriter:提供了丰富的方法,比BufferedWriter更加常用,此类型提供了行自动刷新的功能
构造器:
PrintWriter(File file)
PrintWriter(OutputStream out)
PrintWriter(OutputStream out, boolean autoFlush)
PrintWriter(String fileName)
PrintWriter(Writer out)
PrintWriter(Writer out, boolean autoFlush)
上述构造器,有第二个参数的,可以设置为true,表示行自动刷新。
只有一个参数的构造器,相当有两个参数时,设置为false的情况,即取消了
行自动刷新的功能
常用方法:
println()
通过写入行分隔符字符串来终止当前行。
println(boolean x)
打印一个布尔值,然后终止该行。
void println(char x)
打印一个字符,然后终止该行。
void println(char[] x)
打印字符数组,然后终止行。
void println(double x)
打印双精度浮点数,然后终止行。
void println(float x)
打印一个浮点数,然后终止该行。
void println(int x)
打印一个整数,然后终止该行。
void println(long x)
打印一个长整型,然后终止行。
void println(Object x)
打印一个对象,然后终止该行。
void println(String x)
BufferedReader:提供了一个缓冲区
构造器:
BufferedReader(Reader in)
创建使用默认大小的输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz)
创建使用指定大小的输入缓冲区的缓冲字符输入流。
常用方法:
String readLine():
读一行字符串,读至换行符号为止,返回的数据不包含换行符
当返回值为null时,表示读至文件末尾
文件字符流:
FileWriter/FileReader
FileWriter:相当于OutputStreamWriter与 FileOutputStream合起来的功能,内部也维护 了一个缓冲区,但是需要手动flush
构造器:
FileWriter(File file)
FileWriter(File file, boolean append)
FileWriter(String fileName)
FileWriter(String fileName, boolean append)
append:表示追加,但是此流不能设置字符集。常用方法与 OutputStreamWriter的差不多
FileReader:相当于InputStreamReader和FileInputStream合起来的功能内部也维护了一个缓冲区
构造器:
FileReader(File file)
FileReader(String fileName)
常用方法与InputStreamReader的方法差不多
System是一个final修饰的类型
两个成员变量
out:是PrintStream类型,默认的输出目的地是控制台console
in: 是InputStream类型, 默认的数据源是键盘

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值