前一段时间看了一下Java中流的概念,整理一下
流根据输入方向的不同分为输入流,输出流
根据处理单位的不同分为字节流,字符流
根据作用不同分为节点流,处理流
一般情况下是根据作用不同做区分:
节点流: ByteArrayInputStream,CharArrayReader(对应的ByteArrayOutputStream和CharArrayWriter,以下省略)
FileInputStream ,FileReader
PipedInputStream,PipedReader
StringReader(只有字符流)
处理流:FilterInputStream,FilterReader
BufferedInputStream, BufferedReder
InputStreamReader
ObjectInputStream(只有字节流)
LineNumberInputStream LineNumberReader(只有输入流)
DataInputStream DataOutputStream(只有字节流)
PushbackStream PushbackReader(只有输入流)
PrintStream PrintWriter(只有输出流)
字节流和字符流是流的一种划分,按照处理流的数据单位进行的划分,两类都分为输入和输出操作,字节流输出数据OutputStream,输入InputStream
字符流输出Writer,输入Reader完成。四个都是抽象类。
字符流处理的单元为两个字符的Unicode字符,操作字符、字符数组或字符串。字节流处理单元为1个字节,操作字节和字节数组,字节流是最基本的,所有inputstream和outputstream的子类都是字节流,主要用在处理二进制数据,按照字节来处理的,实际中很多的数据是文本,于是又产生了字符流,它是按照虚拟机的编码来处理,也就是要进行字符集的转化,这两个之间通过inputStreamReader和outputStreamWriter(转换流)来关联,实际上是通过byte[]和string来关联的。