刚开始适用java的IO流,用来处理键盘输入和socket通讯,好不容易调通了,就以为自己可以总结了。但是遇到新的问题,才知道上一篇文章真是知其然不知其所以然。昨天仔细学习了一篇比较清晰的IO流分析总结文档,对着api的文档推敲一番。又回头自己做了两个可以多终端通讯的例程,才觉得对于数据流的处理,似乎清晰了一些。
(备注:前文提及的文章地址 http://blog.csdn.net/llhhyy1989/article/details/7388059)
1、对IO流的不同分类
(1)根据数据流方向 output-输出流 input-输入流
(2)根据处理数据单位的不同stream-字节流reader/writer-字符流
(3)根据实现的功能不同 节点流 和处理流
我自己的思考方式是,先考虑数据流方向,再考虑需要处理成什么数据单位,在根据读写的便利,考虑不同的处理流
2、读写文件或是网络数据时,可能用到的不同流
字节流输入流(InputStream)
节点流类型的:FileInputStream
处理流类型的:BufferedInputStream DataInputStream
我的理解是这样的:FileInputStream 需要直接从源文件读取输入流,而处理类型的则只能处理已有的被命名的流。看下API对类的说明,可以发现 BufferedInputStream 在创建类时,就在内部缓冲区创建了数组,读取后可以得到字节不同的字节数组。而DataInputStream是把原始输入流,转化为一种与平台无关的数据流,读取与写入要互相匹配,这个类中有个readUTF可以直接读取unicode字符串
字节输出流(OutputStream)
节点流类型的:FileOutputStream
处理流类型的:BufferedOutputStream DataOutputStream PrintStream
我的理解:前三个类是与字节流输入流相对应的,这里关注一下PrintStream,这个类用于处理一个outputStream,当一个字节数组传入,或则println的任一种方法被调用哦哦个,改行就会自动增加一个回车('\n'),然后自动执行Flush动作
字符输入流(Reader)
节点流类型的: FileReader
处理流类型的: BufferedReader InputStreamReader
我的理解:FileReader是直接从源文件获取字符流,而BufferedReader可以把字符流转化为缓冲区模式读取,同时读取方式也便利了很多。InputStreamReader用于把输入的字节流,转化为字符流
字符输出流(Writer)
节点流类型的: FileWriter
处理流类型的: BufferedWriter InputStreamWriter printWriter
我的理解:printWriter作用类似于printStream,但是处理对象一个是字节流,一个是字符流