转换流和

OutputStreamWriter类
OutputStreamWriter是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节。它的作用的就是,将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去。
InputStreamReader类
InputStreamReader是字节流通向字符流的桥梁:它使用指定的字符编码表读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
转换流和子类区别:

发现有如下继承关系:

OutputStreamWriter:

FileWriter:

InputStreamReader:

FileReader;

父类和子类的功能有什么区别呢?

OutputStreamWriter和InputStreamReader是字符和字节的桥梁:也可以称之为字符转换流。字符转换流原理:字节流+编码表。

FileWriter和FileReader:作为子类,仅作为操作字符文件的便捷类存在。当操作的字符文件,使用的是默认编码表时可以不用父类,而直接用子类就完成操作了,简化了代码。



InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));//默认字符集。

InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"GBK");//指定GBK字符集。

FileReader fr = new FileReader("a.txt");


的功能是一样的,其中第三句最为便捷。

注意:一旦要指定其他编码时,绝对不能用子类,必须使用字符转换流。什么时候用子类呢?

条件:

1、操作的是文件。2、使用默认编码。

总结:

字节—>字符 : 看不懂的—>看的懂的。 需要读。输入流。 InputStreamReader

字符—>字节 : 看的懂的—>看不懂的。 需要写。输出流。 OutputStreamWriter

字节缓冲流

字节缓冲流根据流的方向,共有2个

写入数据到流中,字节缓冲输出流 BufferedOutputStream

读取流中的数据,字节缓冲输入流 BufferedInputStream

它们的内部都包含了一个缓冲区,通过缓冲区读写,就可以提高了IO流的读写速度

字节缓冲输出流BufferedOutputStream

通过字节缓冲流,进行文件的读写操作,写数据到文件的操作

构造方法

public BufferedOutputStream(OutputStream out)创建一个新的缓冲输出流,以将数据写入指定的底层输出流。

字节缓冲输入流 BufferedInputStream

读取文件中数据的操作

构造方法

public BufferedInputStream(InputStream in)

字符缓冲流

字符缓冲输入流 BufferedReader

字符缓冲输出流 BufferedWriter

完成文本数据的高效的写入与读取的操作

字符缓冲输出流 BufferedWriter

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

方法:

void newLine() 根据当前的系统,写入一个换行符

字符缓冲输入流 BufferedReader

从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

方法:

public String readLine()读取一个文本行,包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null

流的操作规律

把IO流进行了规律的总结(四个明确):

明确一:要操作的数据是数据源还是数据目的。

              源:InputStream    Reader

              目的:OutputStream Writer

先根据需求明确要读,还是要写。

明确二:要操作的数据是字节还是文本呢?

              源:

                       字节:InputStream

                       文本:Reader

              目的:

                       字节:OutputStream

                       文本:Writer

已经明确到了具体的体系上。

明确三:明确数据所在的具体设备。

              源设备:

                       硬盘:文件  File开头。

                       内存:数组,字符串。

                       键盘:System.in;

                       网络:Socket

              目的设备:

                       硬盘:文件  File开头。

                       内存:数组,字符串。

                       屏幕:System.out

                       网络:Socket

完全可以明确具体要使用哪个流对象。

明确四:是否需要额外功能呢?

              额外功能:

                       转换吗?转换流。InputStreamReader OutputStreamWriter

                       高效吗?缓冲区对象。BufferedXXX
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值