JAVA总结 0823 DAY19 Vimcelia

回顾:

  1. InputStream(输入流) 与 OutputStream(输出流) ;Reader(字符读)与Writer(字符写) === > 四个最大的基类

  2. InputStream 的子类 FileInputStream
    读取文件的一个大致步骤:

    1. 实例化FileInputStream
    2. 调用其读取的方法read( )
    3. 关闭资源
  3. OutputStream的子类FileOutputStream
    写文件大致的步骤:
    1. 实例化FileOutputStream
    2. 调用其Write( )
    3. 关闭资源

  4. 一般使用的是带缓冲区的流 BufferInputStream和BufferOuputStream (采用第三方的框架)

字符流

乱码:
在这里插入图片描述
Reader:用于读取字符流的抽象类,子类是 InputStreamReader==> FileReader

字符读取原理

在这里插入图片描述

int read( )   

读取单个字符。

int read(char[ ] chars)  

将字符读入数组。

int read(char[ ] chars, int off, int len)   

指定数组读取的范围

FileReader

读取字符文件的便捷类,调用其构造方法

super(new FileInputStream(file)); 

与字符流一样还是转换为字节流开始读取,因为GBK 里两个负数表示一个汉字,读取到两个负数之后再把其合拼起来,正数就直接显示了.

注意:

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

构造方法:
public FileReader(File file)   

参数是一个文件的名称

public FileReader(String fileName)  

参数是文件的路径

构造方法做的事:
  1. 实例化这个FileReader
  2. 把这个FileReader 对象指向要读文件的位置
方法:
int read( )   

读取单个字符。

int read(char[ ] cbuf, int offset, int length)  

将字符读入数组中的某一部分。

使用 FileReader 的基本步骤:
  1. 实例化这个类
  2. 调用其read()方法
  3. 关闭资源
读取的方式:
  1. 一个一个字符进行读取:
    在这里插入图片描述
  2. 读取多个:
    在这里插入图片描述

FileWriter:

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

常规的一些方法 :
close( )   

关闭此流,但要先刷新它。(关闭前包括刷新)

abstract  void flush( )   

刷新该流的缓冲。

void write(char[ ] cbuf) 

写入字符数组。

abstract  void write(char [ ] cbuf, int off, int len)   

写入字符数组的某一部分。

void write(int c)    

写入单个字符。

void write(String str)   

写入字符串。

void write(String str, int off, int len)   

写字符串的指定的一部分

注意点:

用于写入字符流,要写入原始字节流,请考虑使用 FileOutputStream

构造:
FileWriter(File file)
FileWriter(String fileName)
构造做的事情:
  1. 实例化这个FileWriter
  2. 如果这个文件不存在会创建文件
  3. 把 FileWriter 执行要写入文件位置
使用 FileWriter 的基本步骤步骤:
  1. 实例化这个对象
  2. 调用其写的方法: 用FileWriter 来写自带一个缓冲区(也就是将字符转换成字节)
  3. 调用其flush() 方法 , 将缓冲区里的数据刷到文件里
  4. 关闭资源

字符带缓冲区的流: BufferedReader

好处:

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

构造:
public BufferedReader(Reader in)  

需要传递一个Reader 对象

方法:
public String readLine()  

读取一行数据, 返回值是读取的当前数据

使用缓冲区流来进行读取:
  1. 实例化 BufferedReader
  2. 调用 readLine()
  3. 关闭资源

BufferedWriter:

好处:

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

构造方法
public BufferedWriter(Writer out)  

传递了 一个Writer 对象

方法:
public void newLine( ) 

等同于"\r\n" ==>也就是换行

使用缓冲区流来写入数据的一个基本步骤:
  1. 实例化 BufferedWriter
  2. 调用其write()
  3. 关闭资源

转换流 InputStreamReader:

字节流通向字符流的桥

构造方法:
public InputStreamReader(InputStream in,Charset cs)  

第一个参数是一个 InputStream;第二个参数传递的是要设置的编码格式

常规的方法:
read();
步骤
  1. 实例化InputStreamReader
  2. 调用其读的方法
  3. 关闭资源

OutputStreamWriter:

字符流通向字节流的桥梁

构造方法:
public OutputStreamWriter(OutputStream out,Charset cs)

第一个参数是: 输出流对象 , 第二个:设置编码格式

常规的方法:
write()
步骤
  1. 实例化OutputStreamWriter
  2. 调用其写的方法
  3. 关闭资源

对象流: ObjectOutputStream

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

构造:
public ObjectOutputStream(OutputStream out) 

需要来传递OutputStream, 可以构建一个文件地址或者是文件

写的方法:
public final void writeObject(Object obj)  

这个方法就是写一个对象

步骤:
  1. 实例化ObjectOutputStream
  2. 调用写的方法
  3. 关闭资源
java.io.NotSerializableException api:当实例需要具有序列化接口时,抛出此异常 (序列化异常)

在这里插入图片描述

序列化: 把对象转换成字节序列==>才能保存在文件里
反序列化:把字节序列转换成对象 ==> 方便读取

ObjectInutputStream

把文件中的对象读取出来

注意点:

ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列

构造方法:
ObjectInputStream(InputStream in) 
读对象的方法:
public final Object readObject( )
步骤:
  1. 实例化ObjectInputStream
  2. 调用读的方法
  3. 关闭资源
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值