IO流3操作规律
来源:互联网 发布:数据之巅 百度云 编辑:程序博客网 时间:2024/06/04 18:50
IO流3操作规律
流的操作规律。
因为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.*;
/*
Writer
|--OutputStreamWriter
|--FileWriter
Reader
|--InputStreamReader
|--FileReader
转换流其实就是将字节流和编码表相结合。将字节流中的字节数据,去查了具体的编码表。
所以转换流才可以获取一个中文字符。
那么转换流的子类用于操作文件的对象FileReader 就直接使用父类的具有转换功能的read方法。就可以一次读一个字符。
FileReader fr = new FileReader("a.txt");//该对象中已经内置了本机默认的字符编码表,
//对于简体中文版的机器默认编码表是GBK.
//通过字节读取流读取a.txt中中文数据,按照GBK编码表的来获取中文字符。
InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"GBK");
InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"GBK");
FileReader fr = new FileReader("a.txt");
这两个句代码的功能是一样一样一样的。
区别:
第一句可以指定编码表。
第二句,固定本机默认编码表。
如果操作中文数据,仅使用本机默认码表,那么第二句书写简单。
如果操作中文数据,使用指定码表,必须使用第一句。 而且要将指定码表作为字符串传递到构造函数中。
- IO流3操作规律
- IO流操作规律
- IO 流操作规律
- IO流操作规律
- Java---IO加强(3)-IO流的操作规律
- IO流-操作与规律
- IO流操作的规律
- IO流的操作规律
- java IO 流操作规律
- IO流(流操作规律-1)-(流操作规律-2)
- 转化流和IO流操作规律
- IO流操作基本规律总结
- IO 转换流的操作规律
- Java IO流的操作规律
- IO流操作规律(一)
- IO流的操作规律[Java]
- io流操作的基本规律
- Java IO流的操作规律
- 泛型
- 集合4Map
- API中的类
- 2345好压内部查看器编辑log4.properties引起的linux下无法生成日志文件的Bug
- IO流1-2
- IO流3操作规律
- IO流4
- 最长上升子序列
- gobject
- Max Sum
- hdu 1025 Constructing Roads In JGShining's Kingdom (O(nlogn) 求LIC)
- mpeg-2 PSI/SI
- 手机上做竞技游戏门槛到底有多高?
- PTS PCR DTS 详解