0823总结

0823总结

使用文件输入流和输出流有时会导致乱码,原因是:两端的编码解码方式不一样
解决:在读取操作的时候,查找其编码格式(两端统一)
【系统文件默认的编码格式是GBK】
【idea 默认的编码格式是UTF-8(万国码)】

Reader

用于读取字符流的抽象类
子类是 InputStreamReader

方法

读取单个字符:read()
将字符读入数组:read(char[] cbuf)
指定数组读取的范围:read(char[] cbuf, int off, int len)

FileReader

用来读取字符文件的便捷类【还是转换为字节流开始读取(super(new FileInputStream(file)))】
显示正数:GBK 里两个负数表示一个汉字,读取到两个负数之后再把其合拼起来

注意:FileReader 用于读取字符流。要读取原始字节流,请考虑使用 FileInputStream

构造方法

public FileReader(File file) 参数是一个文件的名称
public FileReader(String fileName) 文件的路径

构造做的事情:
1、实例化FileReader
2、把 FileReader 对象指向要读文件的位置

步骤

1、实例化该类
2、调用其read()方法
3、关闭资源

Writer

写入字符流的抽象类
子类是 OutputStreamWriter

方法

关闭流(会先刷新):close()
刷新该流的缓冲:flush()
写入字符数组:write(char[] cbuf)
写入字符数组的某一部分:write(char[] cbuf, int off, int len)
写入单个字符:write(int c)
写入字符串:write(String str)
写字符串的指定的一部分:write(String str, int off, int len)

FileWriter

用来写入字符文件的便捷流,若要写入原始字节流,可以考虑使用 FileOutputStream

构造

FileWriter(File file)
FileWriter(String fileName)
1、实例化该 FileWriter
2、如果该文件不存在就会创建文件
3、把 FileWriter 执行要写入文件的位置

步骤

1、实例化该对象
2、调用其写的方法(FileWriter自带缓冲区,可将字符转换成字节)
3、调用 flush()方法,将缓冲区里的数据刷到文件里
4、关闭资源

BufferedReader

从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取(速度快,效率高)

构造

public BufferedReader(Reader in)
几个Reader对象

方法

读取一行数据:readLine() 【返回值是读取的当前数据】

步骤

1、实例化 BufferedReader
2、调用 readLine()
3、关闭资源

BufferedWriter

文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入

构造

public BufferedWriter(Writer out)
传递了一个 Writer 对象

方法

public void newLine()【等同于换行】

步骤

1、实例化 BufferedWriter
2、调用其write()
3、关闭资源

InputStreamReader

字节流通向字符流的桥【若想达到最高效率,可以考虑在 BufferedReader 内包装 InputStreamReader】

构造方法

public InputStreamReader(InputStream in,Charset cs)
第一个参数是一个 InputStream
第二个参数传递的是要设置的编码格式

方法

读:read()

步骤

1、实例化InputStreamReader
2、调用其读的方法
3、关闭资源

OutputStreamWriter

字符流通向字节流的桥梁 【若想获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器】

构造方法

public OutputStreamWriter(OutputStream out,Charset cs)
第一个参数是一个OutputStream
第二个参数传递的是要设置的编码格式

方法

写:write()

步骤

1、实例化 OutputStreamWriter
2、调用其写的方法
3、关闭资源

ObjectOutputStream

把对象写入到文件里;父类是OutputStream

构造方法

public ObjectOutputStream(OutputStream out)
需要传递 OutputStream ,可以构建一个文件地址或者是文件

方法

写一个对象:writeObject(Object obj)

步骤

1、实例化 ObjectOutputStream
2、调用写的方法
3、关闭资源

注意:
serialVersionUID :相当于对象序列化的唯一表示符,如果在序列化的时候,不加这个标识符系统会给生成一个标识符,只要修改类的信息就会生成一个新的表示符 ,产生:java.io.NotSerializableException(序列化异常)

//在类里一定要继承 Serializable
public class Student implements Serializable {
    public static final long serialVersionUID =24535L;
    //给其加入一个标识符,以L结尾(long型),值任意给
}

解决方式:给其生成一个标识符UID

序列化:把对象转换成字节序列(才能保存在文件里)
反序列化:把字节序列转换成对象(方便读取)
步骤:
1、实现序列化的接口
2、需要生成一个唯一的表示符

ObjectInputStream

把文件中的对象读取出来
ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列

构造方法

ObjectInputStream(InputStream in)

方法

读对象:readObject()

步骤

1、实例化ObjectInputStream
2、调用读的方法
3、关闭资源

小结

记住各种流的名字有助于在使用的时候找到想要的流:
1、对象操作流:以Object开头的,这是面对一个或多个对象时使用的
2、格式转换流:名字里字节( InputStream 或者 OutputStream )和字符(Reader 或者 Writer)的,用于转码,所以在其构造方法中要传入一个格式的参数
3、高效缓冲字符流:以Buffered开头的,这种方法自带缓冲区,高效实用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值