黑马程序员技术交流社区

标题: 让我豁然开朗的IO总结 给亲们都分享下 [打印本页]

作者: 宗士为    时间: 2012-5-18 10:36
标题: 让我豁然开朗的IO总结 给亲们都分享下
有不明白的可以M我
为黑马奋斗的人们多加交流
如果里面有错误   大家知道的帮指出来   以免我误人子弟  那就罪过啦  
流的体系
后缀  Stream 字节流
      Writer reader  字符流


字符流
        FileReader
        FileWriter

        BufferedReader
        BufferedWriter
转换流(字节流+ 编码表)
        InputStreamReader    字节转字符
        OutputStreamWriter   字符转字节   

字节流
        FileInputStream
        FileOutputStream

        BufferedInputStream
        BufferedOutputStream

        File

        PerintStream
        PerintWriter


        PerintStream
                out.writer  写一个字节(int 的其他3个字节则丢了)    所以97 和 609 都为写出a
                out.println(97)  写了四个字节  9 7 \r \ t     
                out.print(97)    写了2个字节 9 7
                print 保证数据形式的原样输出(要打印的是什么 输出后还是什么不变)

--------------------------------------------

流对象很多 开发时到底使用哪个
流的操作规律
        四个明确
                1.明确操作的是数据源还是数据目的(明缺流的体系)
                源:读取  InputStream Reader
                目的;写入 OutputStram Writer
                2.明确数据内容是否是纯文本
                源:纯文本  Reader(文本操作快捷)
                    不是纯文本   就用InputStream
                目的;纯文本  Writer(文本操作快捷)
                    不是纯文本   就用 OutputStram
                 到这里可以明确源或者目的具体要用的哪个体系


                3.明确数据所在的设备
                源设备:硬盘    File流
                        内存        数组
                        键盘        system.in
                        网络        socket
                目的设备: 硬盘        File流
                           内存 数组
                           显示器(控制台)system.out
                           网络 socket

                4.是否需要额外功能
                        高效                                Buffer
                        编码转换                        通过转换流、所以目的要变化
                        序列化                                 ObjectInputStream  ObjectOutputStream
                        保证数据类型的表现形式                打印流的打印方法
                        基本数据类型转换                DateInputStream  DateOutputStream
                                                                write(int)
                                                                 writeInt(int)


                需求:复制一个文本文件
                        确定源和目的
                                源:InputStream Reader
                                目的; OutputStram Writer

                        明确源和目的是否是纯文件
                                是的
                                源  Reader
                                目的  Writer

                        明确设备
                                源    硬盘
                                目的 硬盘


                        FileReader fr= new FileReader("a.txt")
                        FileWriter fw = new FileWriter("b.txt")

                        FileWriter(使用的中文版JDK使用的是GBK码表)

                        如果对文字进行过滤 (例如论谈非法文字)
                        如果使用上面的字节可以过滤  如果使用字符则不能过滤


                需求:高效复制一个文本文件

                        BufferedFileReader fr= new BufferedFileReader( new FileReader("a.txt"))
                        BufferedFileWriter fw = new BufferedFileWriter( new FileWriter("b.txt"))

                需求:高效复制一个文本文件(用UTF - 8)输出
                       
                        FileReader fr= new FileReader("a.txt")
                        //OutputStreamWriter osw = new OutputStreamWriter();
                        BufferedFileWriter fw = new BufferedFileWriter(new FileOutputStream(new FileWriter("b.txt","UTF-8")))


作者: 张卯    时间: 2012-5-18 10:52
PerintStream
楼主这里多了一个字母e~应该是print
作者: 宗士为    时间: 2012-5-18 11:00
张卯 发表于 2012-5-18 10:52
PerintStream
楼主这里多了一个字母e~应该是print

是的是的  谢谢哈
作者: 李保成    时间: 2012-5-18 11:28
呵呵 简单理解一下就是如果源和目的都是纯文本文本,那么就直接使用字符流,如果不是,则就可以考虑使用转换流,转换流的出现是为了程序的方便操作性,而不是为了高效。如果使用高效就要想到buffered。另外转换流最大的好处就是制定编码格式。
作者: 贾飞雨    时间: 2012-5-18 12:44
谢谢楼主。。
作者: 徐炯    时间: 2012-5-18 18:17
谢谢楼主。。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2