一. 首先先解释一下关于字节流和字符流的区别:
1.字节流:处理单元为1字节的流。
InputStream是所有字节输入流的祖先,OutputStream是所有字节输出流的祖先。
2.字符流:处理单元为2字节的Unicode字符流
Reader是所有字符串输入流的祖先,Writer是所有字符串输出流的祖先。
小结:通过使用字节流,可以读取任意文件。
字节流一次读取一个字节,而字符流使用了字节流读到一个或者多个字节时,去查找指定的编码表,返回对应的编码。
所以字符流只能处理纯文本字符数据,而字节流可以处理更多类型的数据,比如图片,视频,音频文件等。
因此,只要是纯文本数据处理,优先考虑使用字符流。其他情况就使用字节流。
二. 关于结点流和过滤器流的区别
1.结点流(Node Stream) 直接从指定的位置读写(内存,磁盘)
2.过滤器流(Filters) 一般以其他输入流作为其输入源,经过过滤器处理以新的流提供给用户
三. 各子类用法
1. FileInputStream 把文件作为一个InputStream,实现对文件的读取操作
2. PipedInputStream 实现了管道的概念,主要在线程中使用,管道输入流是指一个通讯管道的接收端。
一个线程通过管道输出流发送数据,另一个线程通过管道输入流读取数据,这样可以实现线程的通讯。
3. ByteArrayInputStream 把内存中一个缓冲区作为InputStream使用
4. StringBufferInputStream 把一个String对象作为InputStream.
5. ObjectInputStream 把一个对象作为输入流
(待续)