A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© vvvvvc 中级黑马   /  2016-6-8 00:00  /  500 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

IO流:
        1、用来处理设备之间的数据传输
        2、java进行数据传输使用的就是流的方式
        3、所在的包,io包
        4、分类:
                流向分类:
                        输入流和输出流
                内容分类:
                        字节流和字符流
        5、常用父类:
                InputStream 字节输入流的顶层抽象父类
                OutputStream 字节输出流的顶层抽象父类

                Reader 字符输入流的顶层抽象父类
                Writer 字符输出流的顶层抽象父类

        6、程序书写:
                写之前导包
                写的时候进行异常处理
                写之后要关闭资源


FileInputStream的使用:
        1、如何创建一个对象
                new FileInputStream("a.txt");
        2、read()
                读取一个字节

                注意:返回的是一个int类型

        3、如果到了文件的结尾,返回的是-1

为何read()方法返回值是int类型:
        如果使用byte类型,当文件中出现了11111111的时候,
        明明是一个有效的数据,由于读出来是-1,我们误认为是结束标记,所以不能这样做

        如果使用int类型,读出的数据通通加上24个0,如果出现了11111111的时候,加上0之后就不再是-1了


FileOutputStream
        1、如何创建对象
                new FileOutputStream("z.txt");
                文件不存在就创建文件
                如果文件原来就存在,那么就先清空然后,以后调用write再写
        2、write方法
                用来写出一个字节,参数是int类型,所以在写出的时候,要将前面的24个0去掉


        3、FileOutputStream("z.txt",true)
                原来的文件内容不干掉,继续追加写出
                一个参数的构造其实底层调用的也是两个参数的构造,只不过第二个参数传了一个false


文件的拷贝:
        1、从一个文件中读入,FileInputStream,read方法,一个字节一个字节的读入到内存
        2、再使用FileOutputStream write方法,一个字节一个字节的写出到另一个文件中


文件的拷贝之available方法:
        1、available方法,输入流的方法,返回所关联的文件的字节个数
        2、read(byte[] b)
        3、write(byte[] b)


        两个极端:
                1、一个一个的拿
                2、一次性将所有的鸡蛋都拿回家


定义小数组:
        1、read(byte[] arr),返回的类型是int,返回的是读到的有效字节的个数
                返回值的范围-1,1~arr.length
        2、read(byte[] arr)返回的是int类型,read()返回的也是int类型
                区别:        read(byte[] arr) 返回的数据的含义是读到的有效字节的个数
                                read() 返回的int是指的真正要读取的数据
        3、write(byte[] arr, int offset, int length)
                write(byte[] arr, 0, int length)


小数组的标准格式:
        数组的长度为1024的整数倍


带缓冲区的字节流:
        1、 BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.txt"))
                bis.read();
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("b.txt"))
                bos.write(97);
        2、        理解,读取一个字节,就一次性读取8192字节
                          写出一个字节,并不直接写出到文件,而是写到缓冲区,写满缓冲区,才往文件中写。


flush和close的区别:
        1、flush是刷新,将缓冲区的数据,立刻写到文件中
        2、close是关流,先将缓冲区的数据,立刻写到文件中,然后将流对象关闭

        刷新什么情况下会发生:
                1、手动调用flush
                2、手动调用close
                3、缓冲区写满了


字节流读写中文:
        1、字节流读中文,有可能出现半个字符的情况,也就是读到了半个中文,结果出现乱码
        2、字节流写中文,比较麻烦,先将字符串转成字节数组,再写出到文件中

jdk1.6
        1、创建流和使用流都是在try
        2、关闭流是在finally
                判断流对象是否为空
                两个流,能关一个算一个,所以将第一个的关闭放到try里面,第二个流的关闭放到finally
                        也就形成了finally的嵌套

jdk1.7版本处理异常:
        1、try后面跟着小括号,小括号里面写的是流对象的创建
        2、小括号后面跟着大括号,大括号里面写的是流对象的使用和操作
        3、大括号里面的内容执行完以后,小括号里面创建的流对象就会被自动关闭,所以不用手动的写关闭方法

3 个回复

倒序浏览
明天我们要讲这个内容,就当是先预习了
回复 使用道具 举报
这么详细,已经收下
回复 使用道具 举报
很好很透彻,收藏了,多谢楼主
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马