以字节为单位,8位,可访问全部类型文件,在写入时其实是将byte中的二进制数据写入文件(即便为byte赋值65,也是将65转成一串二进制数据,而后写入,由于全部流都是读写二进制数据)数组
以字符为单位,16位Unicode,只可访问文本文件.网络
(因为直接使用字节流时,输出流会要求将数据转成二进制数据(即byte类型),在读取时又只能读取到byte类型,若是要还原到原始类型则须要手动转换,同时可能产生读取的byte不足以转换为一个字符(一些字符须要多个字节),此时会产生乱码.因此对于字符类型,将相应操做封装起来,创建字符流的输入/输出)多线程
(字符流避免了"读一半"的状况,读/写编码表不统一的状况仍需其余操做进行处理)性能
FileInputStream和FileOutputStream编码
获取文件的输入流或输出流,实现对任意文件的读写spa
特色:线程
FilterInputStream和FilterOutputStreamcode
过滤器输入流和过滤器输出流,为基础的输入流和输出流增长其余功能.有多种不一样功能的子类对象
DataIntputStreamblog
数据输入流容许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。
DataOutputStream
数据输出流容许应用程序以适当方式将基本Java数据类型写入输出流中。
特色:
(由于其余字节流只能读写字节和字节数组,例如其余输出流写入65时,文件中显示的是A)
BufferedInputStream和BufferedOutputStream
特色:
PushbackInputStream
特色:
PrintStream
特色:
ObjectInputStream和ObjectOutputStream
特色:
PipedOutputStream和PipedInputStream
管道输出流和管道输入流。
特色:
ByteArrayInputStream和ByteArrayOutputStream
内存输入流和内存输出流
在内存中设置必定长度的数组做为缓冲区
特色:
SequenceInputStream
特色:
将多个输入流合并为一个输入流,在读入时,当前输入流读入完毕自动转入下一个输入流进行读取
BufferedReader和BufferedWriter
组合其余Reader和Writer使用
能够读取一行
InputStreamReader和OutputStreamWriter
转换流,将字节流装饰为字符流
InputStreamReader 是字节流通向字符流的桥梁
OutputStreamWriter 是字符流通向字节流的桥梁
在构造时须要InputStream和OutputStream
FileReader和FileWriter
StringReader和StringWriter
相似ByteArrayInputStream和ByteArrayOutputStream,可是缓冲区是一个String
PipedReader和PipedWriter
管道字节输入输出流
CharArrayReader和CharArrayReader
相似ByteArrayInputStream和ByteArrayOutputStream,可是缓冲区是一个char[]
PushbackReader
增长推回,组合其余Reader使用