18_输入和输出处理2

输入和输出处理

字符流

字符输入流

java.io.Reader

  • InputStreamReader 将字节输入流转换为字符流
    • java.io.FileReader

构造方法:

  • FileReader(String fileName) 根据文件路径构建字符输入流对象
  • FileReader(File file) 根据 File 对象构建字符输入流对象

常用方法:

  • read() : int 读取一个字符
  • read(char[] cbuf) : int 读取一个字符数组的内容,返回的是读取了多少个字符到字符数组中,返回 -1 代表读取完毕
  • close() : void 关流

字符输出流

java.io.Writer

  • OutputStreamWriter 将字节输出流转换为字符流
    • java.io.FileWriter

构造方法:

  • FileWriter(String fileName)
  • FileWriter(String fileName, boolean append)
  • FileWriter(File file)
  • FileWriter(File file, boolean append)

常用方法:

  • write(int c) : void 输出一个字符

  • write(char[] cbuf) : void 输出一个字符数组

  • write(char[] cbuf, int off, int len) : void 输出一个字符数组的一部分

  • write(String str) : void 输出一个字符串

  • write(String str, int off, int len) : void 输出一个字符串的一部分

  • close() : void 关流

  • flush() : void 刷新缓冲区

高效字符流

java.io.BufferedReader

构造方法:

  • BufferedReader(Reader in)

常用方法:

  • readLine() : String 读取一行

java.io.BufferedWriter

构造方法:

  • BufferedWriter(Writer out)

常用方法:

  • newLine() : void 输出一个换行符

高效字符流的其他方法和上面的基本字符流一致。

读取各种类型数据(了解)

DataInputStream和DataOutputStream

构造方法:

  • DataInputStream(InputStream in)
  • DataOutputStream(OutputStream out)

常用方法:

  • readUTF() : String
  • readInt() : int
  • readDouble() : double
  • readChar() : char
  • readBoolean() : boolean
  • writeUTF(String) : void
  • writeInt(int) : void
  • writeDouble(double) : void
  • writeChar(char) : void
  • writeBoolean(boolean) : void
  • close() : void

序列化(对象流)

ObjectInputStream :反序列化

构造方法:

  • ObjectInputStream(InputStream in)

常用方法:

  • readObject() : Object 读取对象

ObjectOutputStream :序列化

构造方法:

  • ObjectOutputStream(OutputStream out)

常用方法:

  • writeObject(Object obj) : void 写入对象

在输出对象时,该对象所属的类必须实现序列化接口。

public classimplements Serializable {

}

序列化和反序列化

【强制】 序列化类新增属性时,请不要修改 serialVersionUID 字段,避免反序列失败;如果完全不兼容升级,避免反序列化混乱,那么请修改 serialVersionUID 值。
说明: 注意 serialVersionUID 不一致会抛出序列化运行时异常。

java.io.InvalidClassException: demo04.User; local class incompatible: stream classdesc serialVersionUID = 6956675782234049705, local class serialVersionUID = -2472659678273126616

如果序列化类,没有指定序列化版本 UID,它在进行序列化时,系统会根据类的信息自动生成一个 UID。

但这种方式会导致,当你改动了序列化类(新增属性),序列化版本 UID 就会发生变化,无法进行兼容性的升级。原有序列化的内容无法反序列化回来。(因为 UID 不同!)

所以,我们可以在序列化类中添加一个 UID,这样是否允许兼容性升级,可以由我们自己来控制。

Commons-io

Hutool

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值