IO流加强(总结)--IO流总结和练习

来源:互联网 发布:美国 二战 知乎 编辑:程序博客网 时间:2024/06/05 17:01

IO流知识点小结

1.流都是用来传输数据的。

2.传输数据时,一定要明确数据源和数据目的地(数据汇)

3.数据源可以是文件、键盘和其他流。

4.数据目的地可以是文件、显示器或者其他流。

5,流只是帮助数据进行传输,可以在传输数据的时候进行处理。比如过滤处理、转换处理等。

使用要点:看顶层(字符流还是字节流,父类公共性功能),
用底层(in,out或者其他子类具体对象)

IO流的命名规律
1.每个子类的后缀名都是所属体系的父类的名称(XXXStream,XXXReader).容易区分所属体系
2.每个子类前缀名都是该子类的具体实现功能。
(ObjectInputStream )

IO流的操作规律

1.明确源和目的:
源:InputSteam Reader 一定是读取进来到程序
目的:OutputSteam Writer 一定是从程序写出去

2.处理数据是否为纯文本的数据?
是: 使用字符流 ,Reader Writer
否: 使用字节流 InputStream, OutputSteam

(到这里,两个明确确定完,就可以确定出要使用哪个体系。接下来,就应该明确具体这个体系要使用哪个具体的对象。(看顶层))

3.明确数据所在设备

(到这里,具体使用哪个对象就可以明确了。(用底层))

4.明确数据是否需要额外功能
(到这里,具体的设计方案就可以明确了。(套接与功能加强)))

另外:如果数据有规律,并且源和目的都是file,需要随机访问时,可以使用RandomAccessFile工具类。

明确数据所在的设备
源设备
显示器(控制台System.out)
硬盘(FileXXX)FileWriter FileOutputStream
内存(数组)ByteArrayOutputStream CharArrayWriter StringWriter
网络(Socket)

目的设备
显示器(控制台System.out)
硬盘(FileXXX)FileWriter FileOutputStream
内存(数组)ByteArrayOutputStream CharArrayWriter StringWriter
网络(Socket)

明确是否需要额外功能?
1) 是否需要高效?缓冲区Buffered (字符与字节各两个)。
2) 是否需要转换?转换流 InputStreamReader OutputStreamWriter
3) 是否操作基本数据类型? DataInputStream DataOutputStream
4) 是否操作对象(对象序列化)? ObjectInputStream ObjectOutputStream
5) 需要对多个源合并吗? SequenceInutStream
6) 需要保证数据的表现形式到目的地吗? PrintStrertWriter

练习

练习1. 复制一个文本文件

1.判断是否为文本文件
源:Reader
目的:Writer

2.明确数据所在设备
源:file(硬盘)
目的:file(硬盘)

FileReader fr = new FileReader("a.txt");FileWriter fw = new FileWriter("b.txt");

3、明确是否需要额外功能?

BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));BufferedWriter bufw = new BufferedWriter(new FileWriter("b.txt"));

练习2. 复制一个图片文件

1.判断是否为文本文件
源:InputStream 目的:OutputStream

2.明确数据所在设备
源:file(硬盘)
目的:file(硬盘)

FileInputStream fin = new FileInputStream("1.jpg");FileOutputStream fout = new FileOutputStrema("2.jpg");

3、明确是否需要额外功能?

```BufferedInputStream bufin = new BufferedInputStream( fin );BufferedOutputStream bufout = new BufferedOutputStream( fout );

练习3. 读取键盘录入,存储到一个文件中

1.判断是否为文本文件
源:Reader 目的:Writer
2.明确数据所在设备
源:键盘
目的:file(硬盘)

 InputStream in = System.in; FileWriter fw = new FileWriter("a.txt");

必须要将键盘录入的字节转成字符。
需要将字节–>字符的转换流。InputStreamReader
还想需要高效。

3、明确是否需要额外功能?

InputStreamReader isr = new InputStreamReader(System.in);FileWriter fw = new FileWriter("a.txt");BufferedReader bufr = new BufferedReader( isr);BufferedWriter bufw = new BufferedWriter( fw );

练习4. 读取一个文本文件,显示到显示器上。

1.判断是否为文本文件
源:Reader 目的:Writer

2.明确数据所在设备
源:硬盘
目的:显示器

 FileReader fr = new FileReader("a.txt"); OutputStream out = System.out;

要将字符数据转换成字节输出。
输出转换流:OutputStreamWriter
还想需要高效。

3、明确是否需要额外功能?

FileReader fr = new FileReader("a.txt");OutputStreamWriter osw = new OutputStreamWriter(System.out);BufferedReader bufr = new BufferedReader( fr);BufferedWriter bufw = new BufferedWriter( osw );

练习5. 读取一个文本文件,将文本按照指定的编码表UTF-8写入到另一个文件中

1.判断是否为文本文件
源:Reader
目的:Writer

2.明确数据所在设备
源:file(硬盘)
目的:file(硬盘)

FileReader fr = new FileReader("a.txt");FileOutputStream fout = new FileOutputStream("b.txt");

假定输出时要为字符数据指定编码表。转换流中的参数需要字节流,因此用FileOutputStream。
转换流:OutputStreamWriter,还想需要高效

3、明确是否需要额外功能?

FileReader fr = new FileReader("a.txt");OutputStreamWriter osw = new OutputStreamWriter(fout,”utf-8”);BufferedReader bufr = new BufferedReader( fr);BufferedWriter bufw = new BufferedWriter( osw );
0 0