IO流的操作规律[Java]

流操作指南
本文详细介绍了如何根据数据源、目的及特性选择合适的IO流对象,包括字符流与字节流的应用场景,以及如何提升读写效率。

流的操作规律。

 因为io包中的对象很多,最重要的是要知道完成数据处理是,要使用哪个对象最合适。


如何判断要使用哪些对象呢?


通过几个明确来判断对象的使用。
 1,明确数据源,和 数据目的(数据汇)
  数据源:InputStream   Reader
  数据目的:OutputStream  Writer
 2,明确数据的内容是否是纯文本。只要是纯文本数据,就使用字符流。
  数据源: 是: Reader。
  数据目的:是:Writer
  如果不是,就使用InputStream或者OutputStream

  如果数据不能明确,只有使用字节流。
  这样就可以将四个基类,进行确定,要使用哪一个。
 3,明确具体设备。
  数据源:键盘(System.in) ,内存(数组), 硬盘(File开头的流对象)。
  数据目的: 控制台(System.out),内存(数组),硬盘(File开头的流对象)。
 4,明确是否需要提高效率?
  是:使用带Buffer对象。

 5,是否需要一些特殊场景的操作,来完成数据的特殊处理。


 
需求1:复制一个文本文件。
 1,
 数据源:InputStrea,Reader
 数据目的:OutputStream ,Writer
 2,
 是否是纯文本。
 是。
 数据源:Reader
 数据目的:Writer
 3,
 明确设备:
 数据源:是一个文件,硬盘设备。 FileReader
 数据目的:是一个文件。硬盘设备。 FileWriter.

 代码就已经出来了。
 FileReader fr = new FileReader("a.txt");
 FileWriter fw = new FileWriter("b.txt");

 4,
 需要高效吗?
 需要。
 FileReader fr = new FileReader("a.txt");
 BufferedReader bufr  = new BufferedReader(fr);

 FileWriter fw = new FileWriter("b.txt");
 BufferedWriter bufw = new BufferedWriter(fw);


-----------------

需求2:将键盘录入的数据存储到一个文件中。
 1,
 数据源:InputStrea,Reader
 数据目的:OutputStream ,Writer
 2,
 是否是纯文本?
 是。
 数据源:Reader
 数据目的:Writer.
 3,
 设备:
 数据源:System.in;为了方便于操作数据源的字节数据,对其进行转换。使用转换流。
 数据目的:硬盘文件。FileWriter.

 发现一个问题,就是数据源是一个字节流。
 因为纯文本使用字符流操作最方便,
 所以,将数据源设备对应的字节流转成字符流。
 
 InputStreamReader isr = new InputStreamReader(System.in);

 FileWriter fw = new FileWriter("a.txt");

 4,
 需要高效吗?需要。
 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

 BufferedWriter bufw = new BufferedWriter(new FileWriter("a.txt"));


需求3:将一个文本文件打印到控制台
 1,
 数据源:InputStrea,Reader
 数据目的:OutputStream ,Writer
 2,
 是否是纯文本?
 是。
 数据源:Reader
 数据目的:Writer.
 3,
 数据源:硬盘文件 FileReader
 数据目的:控制台 System.out.因为目的是字节流,而操作的是字符流,所以要将字符流转成字节流到目的中。
    使用到了转换流。 OutoutStreamWriter
// FileReader fr = new FileReader("a.txt");
// PrintStream ps = System.out;//还没学到。所以改了。
 
 FileReader fr= new FileReader("a.txt");

 OutputStreamWriter osw = new OutputStreamWriter(System.out);

 需要缓冲高效吗?需要。
 BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
 BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));


需求4:后去键盘录入,并将数据打印到控制台。
 自己完成。


 
------------------

需求1:复制一个文本文件。将一个GBK编码的文件,复制到另一个用UTF-8编码的文件中。
 1,
 数据源:InputStrea,Reader
 数据目的:OutputStream ,Writer
 2,
 是否是纯文本?
 是。
 数据源:Reader
 数据目的:Writer.
 3,
 设备:
 数据源:硬盘文件 
 数据目的:硬盘文件。
 涉及到编码数据。
 源:是gbk FileReader
 目的:因为是UTF-8,所以只能使用转换流。转换流中需要明确具体的字节流和编码。
  编码是UTF-8,字节流就是对应硬盘设备的FileOutputStream。

 FileReader fr = new FileReader("a.txt");
 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"),"utf-8");
 
 需要高效就加上buffer


import java.io.*;

class 
{
 public static void main(String[] args)
 {
  FileReader fr = new FileReader("a.txt");//
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值