黑马程序员-javaIO学习笔记

----------------------  android培训 java培训 、期待与您交流! ----------------------

javaIO

一、   File类

         1、       File类是IO包中唯一代表磁盘文件本身信息的类而不是文件中的内容。

         2、       File类定义了一些与平台无关的方法来操纵文件,例如,创建、删除文件和重命名文件。

         3、       Java中的目录被当做一种特殊的文件使用,list方法可以返回目录中的所有子目录和文件名。

         4、       在Unix下地路径分隔符为(/),在Dos下的路径分隔符为(\),Java正确处理Unix和Dos的路径分隔符。


二、   RandomAccessFile类

        1、 RandomAccessFile类提供了众多的文件访问方法。

        2、 RandomAccessFile类支持“随机访问”方式------即可以跳转到文件的任意位置开始读写数据。

               因为其实例对象中有个指示器,可以跳转到文件的任意位置。

              应用:断点续传,多线程下载。

        3、 RandomAccessFile类在随机(相对顺序而言)读写等长记录格式的文件时有很大的优势。

        4、RandomAccessFile类仅限于操作文件,不能访问其他的IO设备,如网络,内存映像等。

        5、两种构造方法:

               new RandomAccessFile(f,”rw”);//读写方式

              new RandomAccessFile(f,”r”);//只读方式

        6、不管读还是写,都以指示器为标准。

 

三、   各节点流类

        1、理解流的概念

            1) 流是字节序列的抽象概念。

                  例如:文件、输入输出设备、网络、内存、内部进程通信管道、TCP/IP套接字等设备传输的数据序列                   ,都可以理解为流。

           2)流和文件的差异:

                文件是数据的静态存储形式,而流是指数据传输时的形态。

           3)流类分为两个大类:节点流类和过滤流类,其中过滤流类也叫处理流类。

           4)用于直接操作目标设备所对应的类,叫节点流类。节点流类所对应的IO源或者目标称为流节点。

                程序也可以通过一个间接地流类,去调用节点流类,以达到更加灵活的读写各种类型的数据。

        2、 InputStream与OutputStream类(处理字节)

         InputStream:

          1) 程序可以从中连续读取字节的对象叫输入流,在java中,

                  用InputStream类来描述所有输入流的抽象概念。

         2)InputStream类的方法

              int read()  ------读取管道结束时,返回-1                   

              返回值为什么是int?------因为二进制形式为11111111的数据,以byte类型表示为-1,

              以int类型表示为255。返回值为byte的话,此时的-1与读取到结束时返回的-1就无法区分了。

              而int的取值范围为0到255,就没有这种冲突。

              int read(byte[] b)-----读取到byte数组中

              int read(byte[]b,int off,int len)

              long skip(long n)

              int available()

              void mark(inr readlimit)------建立标记

              void reset()-------与mark()方法配合使用,当调用reset()方法时,再次回到标记处

             boolean markSupported()

             void close()-----思考:有了垃圾回收器,为什么还要调用close方法?

             因为创建流的时候,实际上在计算机的内存中产生了两个事物,一个是java程序的类实例对象,

             一个是系统本身产生的某种资源。而java垃圾回收器只能管理类实例对象,不回管理系统产生的资源。

             所以我们需要调用close()方法去告诉系统释放系统中产生的流资源。

         3)InputStream是一个抽象类

          OutputStream:

            1)  程序可以向其中连续写入字节的对象叫输出流,

                 在java中, 用OutputStream类来描述所有输出流的抽象概念。

           2)  OutpurStream类的方法

                void write(int b)

                void write(byte[] b)

                void write(byte[]b,int off,int len)

                void flush()

                void close()

           3)  OutputStream是一个抽象类。

     3、FileInputStream与FileOutputStream类

           1)   FileInputStream 和FileOutputStream类分别用来创建磁盘文件的输入流和输出流对象,

                 通过它们的构造函数来指定文件路径和文件名。

          2)   创建FileInputStream实例对象时,指定的文件应当是存在和可读的。

                创建FileOutputStream实例对象时,如果指定的文件已经存在,这个文件中的原来内容将被覆盖清除。

         3)   对同一个磁盘文件创建FileInputStream对象的两种方式:

              (1) FileInpurStreaninOne = new FileInputStream(“hello.test”);

              (2) File f= new File(“hello.test”);

                    FileInpurStream inTwo = newFilwInputStream(f);

         4)创建FileOutputStream实例对象时,可以指定还不存在的文件名,

            不能指定一个已被其他程序打开了的文件。

    4、Reader与Writer类(处理字符)

         1) Reader和Writer是所有字符流类的抽象基类,

               用于简化对字符串的输入输出编程,即用于读写文本数据。

         2) 二进制文件和文本文件的区别,可以简单的认为:如果一个文件专用于存储文本字符,

              这个文件就是文本文件,除了文本文件以外的文件都是二进制文件。文本文件时二进制文件的一种特例。

         3)FileOuputStream向文件中写数据时,不必要显示刷新缓冲区,而FileWriter就需要显示刷新缓冲区了。

    5、PipedInputStream与PipedOutputStream类

        1)PipedInputStream与PipedOutputStream类用于在应用程序中的创建管道通信

        2)要用in.connect(out);方法相连

        3) PipedWriter和PipedReader类与上类似

        4)使用管道流类,可以实现各个程序模块之间的松耦合通信。用于线程之间的通信。

    6、ByteArrayInputStream与ByteArrayOutputStream类

       1)ByteArrayInputStream和ByteArrayOutputStream,用于以IO流的方式来完成对字节数组内容的读写,

            来支 持类似内存虚拟文件或者内存映像文件的功能。

      2)ByteArrayInputStream有两个构造函数:

            ByteArrayInputStream(Byte[] b);

            ByteArrayInputStream(Byte[] b,int offset,int length);

            ByteArrayOutputStream有两个构造函数:

            ByteArrayOutputStream();

            ByteArrayOutputStream(int); //根据int数据的大小创建缓冲区,

            创建缓冲区以后,就可以像虚拟文件一样,向其中写入内容。

       3)StringReader类和StringWriter类来以字符IO流的方式处理字符串。

   7、重视IO程序代码的复用性

       可从以下几个方面考虑:

        1) System.in连接到键盘,是InputStream类型的实例对象。

              System.out连接到显示器,是PrintStream类的实例对象。

        2) 不管各种底层物理设备用什么方式实现数据的终止点,

              InputStream的read方法总是返回-1来表示输入流的结束。

        3) 在Windows下,按下Ctrl+Z组合键可以产生键盘输入流的结束标记,

               在linux下,则是按下Ctrl+D组合键来产生键盘输入流的结束标记。

       建议:要编程从键盘上连续读取一大段数据时,应尽量将读取数据的过程放在函数中完成,
                 使用-1来作为键盘输入的结束点。在该函数中编写的程序代码不应直接使用System.in读取数据,
                 而是用一个InputStream类型的形式参数对象来读取数据,
                 然后将System.in作为实参传递给InputStream类型的形式参数来调用该函数。




----------------------  android培训 java培训 、期待与您交流! ----------------------


详细请查看: http://edu.csdn.net/heima

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值