黑马程序员_IO流的要点整理

来源:互联网 发布:农村淘宝代购流程 编辑:程序博客网 时间:2024/06/10 08:40
---------------------- android培训 、 java培训 、 期待与您交流! ----------------------


1、 IO(Input Output)流IO流用来处理设备之间的数据传输

        在读写字符串时,如果在构造时,传入第二个参数为true,将原有文件末尾进行读写

        close()和flush()的区别?
         a.调用flush,可以将数据刷到目的地中,流依然存在,可以继续使用,
           调用close,可以将数据刷到目的地中,流已被关闭,不能继续使用,最后使用。
         b.close不仅刷新缓冲区,还关闭底层资源

        创建读取对象,和数据源先相关联

2、 装饰模式:为了解决给类功能进行增强而出现的。
    
        装饰类和被装饰的特点:

        a.装饰类中的构造函数需要接受被装饰。
        b.装饰类和被装饰类应该属于同一个体系
    
         * 装饰模式:为了解决给类的功能进行增强而出现的。
         * Writer
         *         |--TextWriter
         *         |--MediaWriter
         * 想要对流对象的功能进行增强,比如提高写入的效率。
         * 使用缓冲技术。
         * Writer
         *         |--TextWriter
         *                 |--BufferedTextWriter
         *         |--MediaWriter
         *                 |--BufferedMediaWriter
         * 每一个子类这样实现是可以的,但是导致继承体系较为臃肿。
         * 发现其实无论哪个子类需要高效,使用的都是缓冲技术。
         * 干脆将缓冲技术进行单独的描述和封装。
         * 要缓冲区谁,就将谁传给缓冲区。
         * BufferdWriter
         * class BufferedWriter extends Writer
         * {
         *         BufferedWriter(Writer w)
         *         {}
         * }
         * 装饰设计模式。
         * Writer
         *         |--TextWriter
         *         |--MediaWriter
         *         |--BufferedWriter
         * 装饰类和被装饰的特点:
         * 1,装饰类中的构造函数需要接受被装饰类。
         * 2,装饰类和被装饰类应该所属于同一个体系。

3、 输入/输出流

        FileOutputStream 输出流
        FileInputStream  输入流

        available  获取字节数  以他作为缓冲区的长度是不合适的

4、 转换流:是字符和字节之间的转换桥梁

       InputStreamReader
        OutputStreamWriter

        字符能看懂,字节看不懂
        转换流:字节流+编码表(可以指定)

        ---用于操作File的子类:字节流+本地默认码表(固定)。对默认编码的字符文件操作起来比父类根为便捷

5、 IO流的操作规律
        字符流:对字符流操作的对象
        FileReader
        FileWriter
        BufferedReader
        BufferedWriter
        InputStreamReader
        OutputStreamWriter

        字节流:对字节流操作的对象
        FileInputStream
        FileOutputStream
        BufferedInputStream
        BufferedOutputStream

       问题:开始时,用哪个流对象解决问题?

        明确一:明确源和目的。
              源:就需要使用输入体系。InputStream    Reader
              目的:就需要写,就需要使用输出体系。OutputStream Writer

       明确二:处理的数据是否是存文本数据。
              是:就是使用字符流。
              源:Reader
              目的:Writer

        否:就是字节流。

               源:InputStream

                目的:OutputStream

        两个明确都确定后,可以确定需要使用哪个体系。
       明确三:具体是哪个设备。明确设备的目的是为了确定具体的对象。
              设备源:
              键盘,System.in
              硬盘,操作文件的对象。File开头的流对象。
              内存,数组。
              网络,Socket

       目的设备:
              硬盘,操作文件的对象。File开头的流对象。
              屏幕(控制台)System.out
              内存,数组。
              网络,Socket

       明确四:是否需要额外功能?
              需要高效吗?Buffered
              需要字节和字符之间的桥梁吗?转换流

6、 list():列出当前目录下的文件及文件夹的名称。 目录不存在反对空
       对一个目录使用list前建议先判断。

7、 递归:函数自身调用自身。功能在内部有进行复用,下次功能实用到了上次功能的运算的内容。
       注意;
       a. 一定要定义条件。
       b. 要控制递归次数。

       dir.list();获取的是路径
       dir.listFiles();获取的是路径对象

8、 Propertise:map中的Hashtable子类
        a. 是一个双列集合。map中的方法都是可以用。
       b. 持久的属性集,数据的生命周期较长。
       c. Properties 可保存在流中加载
       d. 键值都是字符串类型

9、 PrintStream: 打印流
       特点:
       a. 给字节输出流提供了打印方法。
       b. 方便打印数值表现形式。
       c. 构造函数接受File对象,字符串路径,OutputStream.
    
       write写出一个int,只将最低一个字节写出。
       print将数值表现形式不变,写到目的地中。都将数据转成字符串。


10、 能操作对象的流对象
       ObjiecInputStream
       ObjectOutputStream

       关键字: transient 瞬态

       RandomAccessFile
       a. 既可以读取,又可以写入
       b. 只对文件操作;
       c. 内部维护了一个大型数组,将字节输入流和字节输出流进行封装。
       d. 通过索引的方式对数组中的元素进行操作,获取和设置索引的方法是getFilePointer,seek.
       e. 随机的访问的原理:就是通过操作索引的方法对指针进行自定义的指定位置来进行读写
       f. 读取时,读取的字节要有规律

11、 操作基本数据类型值得流对象
       a. write(int):将一个整数的四个字节中的最低字节写入到目的地
       b. print(int):将一个整数的表现形式写入到目的地。你写的是什么,到目的地就是什么。
       c. writeInt(int):将一个整数的四个字节写入到目的地。

12、 编码和解码
       字符串--->字节数组:编码
       字节数组--->字符串:解码
    
       String str="你好";
       编码:
       byte[]arr=str.getBytes("UTF-8");

       解码:
       String s1=new String(arr,"GBK");
    
       原则:
       a.  编码编错了,就不用解码了。
       b. 解码解错还有可能更正

        注意会解释“联通”的问题


---------------------- android培训 、 java培训 、 期待与您交流! ----------------------详细请查看:www.itheima.com
0 0
原创粉丝点击