Java IO流的操作规律

流的操作规律
之所以要弄清楚这个规律,是因为流对象太多,开发时不知道用哪个对象合适.
想知道开发时用到哪些对象,只要通过四个明确即可
1.明确源和目的(汇)
源:InputStream Reader
目的:OutputStream Writer
2.明确数据是否是纯文本数据.
源: 是纯文本  Reader
否  InputStream
目的: 是纯文本  Writer
否  OutputStream
到这里,就可以明确需求中具体要使用哪个 体系了
3.明确具体的设备
源设备:
硬盘: File
键盘: System.in
内存:数组
网络:Socket流
目的设备:
硬盘: File
控制台: System.out
内存:数组
网络:Socket流
4.是否需要其他额外功能
a.是否需要高效(缓冲区)
是,就加上buffer
b.转换流  InputStreamReader OutputStreamWriter




需求1:复制一个文本文件
a.明确源和目的
  源:InputStream Reader
  目的: OutputStream Writer
b.是否是纯文本
 是,源:Reader
  目的:Writer
c.明确具体设备
源:硬盘  File
目的:硬盘 File
FileReader fr = new FileReader("a.txt");
FileWriter fw = new FileWriter("b.txt");
d.需要额外功能
需要,高效,
BufferedReader buff = 
new BufferedReader(fr);
BufferedWriter bufw = new BufferedWriter(fw);


需求2:读取键盘录入信息,并写入到文本文件中
a.明确源和目的
  源:InputStream Reader
  目的: OutputStream Writer
b.是否是纯文本
 是,源:Reader
  目的:Writer
c.明确具体设备
源:键盘  System.in
目的:硬盘 File
InputStream in = System.in;//字节流,使用InputStreamReader
FileWriter fw = new FileWriter("b.txt");
这样做可以完成,但是麻烦,将读取的字节数据转成字符串,再由字符流操作
d.需要额外功能
转换.将字节流围成字符流,因为明确的源是Reader,这样操作方便数据时,便捷.所以要将已有的字节流转成字符流.使用字节-->字符  使用InputStreamReader
InputStreamReader isr = 
new InputStreamReader(System.in);
FileWriter fw = new FileWriter("b.txt");
需要,高效,
BufferedReader buff = 
new BufferedReader(isr);
BufferedWriter bufw = new BufferedWriter(fw);
需求3:将一个文件文件内容显示在控制台上
a.明确源和目的
  源:InputStream Reader
  目的: OutputStream Writer
b.是否是纯文本
 是,
 源:Reader
 目的:Writer
    c.明确具体设备
    源:硬盘:File
    目的:控制台:System.out


    FileReader fr = new FileReader("a.txt");
    OutputStream out = System.out;//这样输出内容很麻烦,使用转换流
    d.需要额外功能吗?
    需要:
    转换流
    FileReader fr = new new FileReader("a.txt");
    OutputStreamWriter osw = new OutputStreamWriter(System.out);
    高效,buffer
    BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
    BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
需求4:读取键盘录入数据,显示在控制台上
a.明确源和目的
  源:InputStream Reader
  目的: OutputStream Writer
b.是否是纯文本
 是,
 源:Reader
 目的:Writer
    c.明确具体设备
    源:键盘:System.in
    目的:控制台:System.out
    InputStream in = System.in;
    OutputStream out = System.out;
    d.明确额外功能?
    需要转换,因为都是字节流,但是操作的却是文本数据
    所以使用字符流操作起来更为便捷
    InputStreamReader isr = 
    new InputStreamReader(System.in);
    OutputStreamWriter osw = 
    new OutputStreamWriter(System.out);
    为了将其高效
    BufferedReader bufr = new BufferedReader(isr);
    BufferedWriter bufw = new BufferedWriter(osw);
需求5.将一个中文字符串数据按照指定的编码表写入到一个文本文件中.
1.目的:OutputStream,Writer
2.是纯文本,Writer
3.设备:硬盘 File
FileWriter fw = new FileWriter("a.txt");
fw.write("你好");
注意,既然需求中已经明确了指定编码表的动作
那就不可以使用FileWriter,l因为FileWriter内部是使用默认的本地码表.
只能使用其父类,OutputStreamWriter
它接收一个字节输出流对象,既然是操作文件,那么该对象应该是FileOutputStream
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("a.txt"),charsetName);
需要高效吗?
BufferedWriter bufw = new BufferedWriter(osw);


什么时候使用转换流呢?
  1.源或者目的对应的设备是字节流,但是操作的却是文本数据,可以使用转换作为桥梁,提高对文本操作的便捷.
  2.一旦操作文本涉及到具体的指定编码表时,必须使用转换流
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值