java中,IO流需要操作系统资源,使用完毕后要释放资源。
IO流根据操作的数据的类型的不同,可以分为字节流和字符流,
字符流是基于字节流的。
字符流的顶层基类是Reader和Writer
字节流的顶层基类是InputStream和OutputStream
流是用来操作数据的,数据的最常见形式是文件,字符流针对的是文本文件,字节流针对的是二进制文件(如图片文件)。
1.FileWriter是Writer的一个子类,创建FileWriter对象后,如果源文件不存在则创建新文件;如果源文件存在则覆盖
FileWriter有一个重载的构造函数,指定当往文件中写入数据时,是覆盖原数据还是追加数据,如果传入true则追加数据
其write()方法是把数据写入流中,只有执行了flush()方法后,才能把数据添加到文件。
close()方法,在关闭资源之前也会执行flush()方法。
2.FileReader是Reader的一个子类,其read()方法每次读取一个字符,当读到末尾时返回-1;第二种读取方式是给read()方法
传入一个字符数组,返回独到的字符个数,当读到末尾时返回-1
3.IO流中的缓冲区是为了提高流的操作效率的。当关闭缓冲区时,也就关闭了其所缓冲的流对象
(1)bufferedWriter
使用方式:只要将要提高效率的流对象作为参数传递给缓冲区的构造函数即可。
也要执行flush()或者close()方法,才能把数据谢大目的地
它有一个newLne()方法,是跨越操作系统的换行符。
(2)bufferedReader
使用方式与bufferedWriter类似
它有一个readLine()方法,一次读取一行数据,如果读到末尾,返回null
readLine()原理:无论是读一行,获取多个字符,最终都是在硬盘上一个一个读取,所以最终使用的还是read方法一次读一个的方法.readLine()方法是在读到
"\r\n"时认为读完一行(Windows系统下),然后将数据返回。
(3)装饰模式是在原有类的基础上增强其功能,
4.字节流的两个顶层基类是:InputStream(读),OutputStream(写)
OutputStream的write()方法不需要flush()数据就已经写入到目的地了。
这是一个字符缓冲输出流,该类保持对行号的跟踪,可以通过该类的setLineNumber(int)和getLineNumber(int) 方法分别设置和获取行号
5. 将字符流转对象化为字节流对象,使用转换流:InputStreamReader(字节通向字符的桥梁)
OutputStreamWriter(字符通向字节的桥梁),也就是读进来的是字符,写进去的是字节,只有转换流能够指定编码表
6.总结IO操作的规律:通过两个明确来完成:
(1)明确源和目的
源: 输入流:InputStream,Reader
目的:输出流:OutputStream,Writer
(2)明确操作的额数据是否是纯文本
是:字符流
不是:字节流
(3)当体系明确之后,再明确要使用那个具体对象
通过设备来进行区分
源设备:内存(数组流),硬盘(文件流),键盘(System.in)
目的设备:内存(数组流),硬盘(文件流),控制台(System.out)
原文:http://www.cnblogs.com/wdsthink/p/4372904.html