参考:http://blog.csdn.net/jiangwei0910410003/article/details/22376895
java流在处理上分为字节流和字符流。字符流在处理上为2个字节的unicode字符。分别操作字符,字符数组和字符串。
而字节流处理单元为一字节。操作字节和字节数组
java内用unicode编码存储字符,字符流处理类负责将外部其他编码的字符流和java内部的字符流转换。
InputStreamReader和OutputStreamWriter处理字符流和字节流的转换。字符流(一次可以处理一个缓冲区)比字节流(一次一个字节)操作效率高。
一。以字节为导向的Stream:InputStream和OutputStream
为abstract类,对于字节为导向的都扩展这两个类。
ByteArrayInputStream--把内存中的一个缓冲区作为InputStream使用
StringBufferInputStream--把一个String对象作为InputStream
FileInputStream--把一个文件作为InputStream
PipedInputStream--
SequenceInputStream--把多个输入流连续合并起来
ObjectInputStream--用于操作Object的InputStream
FilterInputStream--是一个过滤的InputStream
BufferedInputStream--使用缓冲区的InputStream
DataInputStream--数字格式化的Stream
二。OutputStream:
ByteArrayOutputStream--把信息存入内存中的一个缓冲区
FileOutputStream--向file输出
PipedOutputStream--管道输出流
ObjectOutputStream--输出Object对象的stream
FilterOutputStream--过滤的outputStream
BufferedOutputStream--带有缓冲区的Stream
DataOutputStream--具有格式化的OutputStream
PrintStream--直接输出到控制台中
三。以字符为导向的Stream:reader,writer
一unicode字符为单位
CharArrayReader:字符输入流的字符缓冲区
StringReader:
FileReader:
PipedReader:
InputStreamReader:将InputStream转化成reader
四。CharArrayWriter
StringWriter
FileWriter
PipedWriter:
OutputStreamWriter:
PrintWriter:PrintReader??
五。两种不同导向Stream之间的转换
InputStreamReader和OutputStreamWriter
六。java io使用原则:
按数据来源分类:
按是否格式化输出:PrintStream,PrintWriter
按是否要缓冲分:BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter
按数据格式分:二进制格式
纯文本格式:
按输入输出分:Reader,InputStream、Writer,OutputStream
特殊需要:Stream到Reader
对象输入输出
进程间通信:PipedInputStream
合并输入:sequenceInputStream
更特殊的需要:PushbackInputStream
决定使用哪个类以及他的构造进程一般准则如下:
首先考虑最原始的数据格式是什么
是输入还是输出
是否需要转换流
数据来源是什么
是否要缓冲
是否要格式化输出