Java_IO流学习
一直以来都被流搞得一头雾水,这两天看了些资料,整理总结了下,终于有点头绪.
1.Java的 java.io 包中,从功能上而言,该包中的类大体对应三种类型的流:
1).此类流直接从指定的位置(如磁盘,文件,存储区域或终端)读或写,这类流称为节点流(node stream);
2).此类流先把节点流接收的数据放到缓冲区,然后再送到目的地,这类流称为过滤流(filters);
3).此类流扮演着转换的角色(如字节转换成字符等),此类流称为转换流.
IO有具体的分类:
1).根据处理的数据类型的不同,可以分为:字节流和字符流
2).根据流向不同,可分为输入流和输出流.( 注:可这样想,由程序向"外部"读取数据进来,则为输入流.由程序向"外部"写入数据,则为输出流 )
字符流和字节流的区别:
1).字节流读到的是字节,而字符流读到一个或多个字节时,先去查指定的编码表,然后返回相应的字节.
2).字节流可以处理所有类型的数据,如图片,mp3,或文本等,而字符流只能处理字符数据,常用于处理纯文本数据,如:键盘输入,读取文本等.
2.常用的流的继承关系如下:

该图仅仅是常用的部分流而已,从图中可看出如下:
- Java 的字节流
- InputStream 是所有字节输入流的祖先;
- OutputStream 是所有字节输出流的祖先;
- Java 的字符流
- Reader 是所有字符输入流的祖先;
- Writer 是所有输出流的祖先;
字节流 字符流
输入流: InputStream Reader
输出流: OutputStream Writer
3.Java字符流(如上图)
Reader 类中的常见方法:
int read():返回的是读到的字符,如果读到流的末尾,则返回-1;
int read(char[]):将读到的字符存入指定的数组中,返回的是读到的字符个数,也就是往数组里装的元素的个数,如果读到流的末尾,则返回-1;
close():进行资源的释放.
Writer 类中的常见的方法:
write(char):将一个字符写入到流中;
write(char[]):将一个字符数组写入到流中;
write(String):将一个字符串写入到流中;
flush():刷新流,将流中的字符串刷新到目的地中,流还存在;
close():关闭资源,会默认调用flush()方法刷新数据送往目的地,然后关闭流;
FileInputStream 和 FileOutputStream
这两个属于节点流,用于读取纯文本型的文件,如txt,读取的为字符型,注意:
构造 FileInputStream , 对应的文件必须存在并且可读;
构造 FileOutputStream ,如输出的文件已纯在,则必须是可覆盖的;
BufferedInputStream 和 BufferedOutputStream
这两个属于过滤器流,其作用是在内存中建立缓冲区,将读/写 的数据先放到缓冲区中,以提高效率
注意:之所以要这样,是因为读取/写入一个字符就往磁盘或其他外设中写入/读取,这样对外设或磁盘来说是很大的负担(操作系统的课)
附:DataInputStream 和 DataOutStream
这两个属于过滤流,听说很有用,它们允许程序按与机器无关的风骨读写Java数据,所以较设和网络上的数据传输(尚未玩过网络编程,先留)
InputStreamReader 和 OutputStreamWriter
这两个是转换流,用于进行字节与字符之间的转换(看上面的图)
InputStreamReader:将读取到的字节转换为字符,接收的是一个 InputStream 对象(具体看JDK)
OutputStreamWriter:将要写入的字节转换为字符,接收的是一个 OutputStream 对象(具体看JDK)
4.Java的字节流
FileInputStream 和 FileOutputStream
节点流,可读取/写入所有文件,如:图片,文本,视频文件等;
BufferedInputStream 和 BufferedOutputStream
过滤流,其作用是在内存中建立缓冲区,将读/写 的数据先放到缓冲区中,以提高效率,接收的对象为 InputStream 和 OutputStream
待编辑...
浙公网安备 33010602011771号