美文网首页
IO流相关

IO流相关

作者: 黑眼圈是画上的 | 来源:发表于2018-01-13 17:04 被阅读0次

    Java.IO 包中定义了多个流类型 (类和抽象类) 来实现输入\输出功能,
    按数据流的方向不同可以分为输入和输出流
    按处理数据单位不同可以分为字节流和字符流
    按照功能的不同可以分为节点流和处理流

    字节流 :完完全全按照二进制编码格式一个字节一个字节来读的。
    输入流    InputStream         输出流 OutputStream
    
    字符流是按照一个字符一个字符来读的,一个字符等于两个字节。    会将读取的字节数据根据当前使用的字符进行编译
    字符流 = 字节流+解码。
    输入流    Reader      输出流   Writer              
    

    只考虑文件操作情况下:
    读取操作是:input \ read 从硬盘(存储设备) 到 内存
    写入操作是:output \ write 从内存 到 硬盘(存储设备)

    节点流
    节点流就相当于一根管道直接插到数据源上面,直接读数据源里面的数据,或者直接往数据源里面写入数据。
    典型的节点流是文件流:文件的字节输入流(FileInputStream) 文件的字节输出流(FileOutputstream)
    文件的字符输入流(FileReader),文件的字符输出流(FileWriter)

    处理流
    处理流是”连接“在已存在的流(节点流或者处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。

    InputStream 输入流
    继承自InputStream的都是用于向程序中输入数据,且数据的单位为字节(8 bit);
    具体方法
    //读取一个字节并以整数的形式返回
    //如果返回-1 已到输入流的末尾
    int read() throws IOException

        //读取一系列字节并存储到一个数组buffer
        //返回存储了读取的字节的byte数组, 如果返回-1 已到输入流的末尾
        int read (byte[] buffer)     throws IOException
        
        close 关闭流,释放资源
    read方法是一个字节一个字节的读。
    read(byte[] buffer)方法是读取是先把数据读取到byte数组buffer里面,然后处理里面的数据。
    

    OutputStream 输出流
    继承自OutputStream的都是用于向程序中输出数据,且数据的单位为字节(8 bit);
    具体方法
    //向输出流中写入一个字节,该字节数据为参数b的低八位
    write(int b) throws IOException
    //将一个字节类型的数组中的数据写入流
    write(byte[]b) throws IOException
    //将一个字节型的数组中的从指定位置开始的len个字节写入到输出流
    write(byte[]b,int off,int len) throws IOException
    //关闭释放内存资源
    close(); throws IOException
    //将输出流中缓冲的数据全部写出到目标文件
    flush() throws IOException

    Reader 流
    和InputStream 一模一样,唯一的区别在于读取的数据单位不同。继承自Reader的流都是向程序中
    输入数据,数据单位都是16bit
    一个字符就是两个字节 这种一个字符一个字符读取的方式有它存在的必要性 比如中文在Unicode码中中文占两个
    字节 ,如果使用字节流来读一次只能读半个字。使用字符流就可以避免这个问题。

    //读取一个字符并以整数形式返回  如果返回-1 已到输入流的末尾
    read()        返回int类型  抛IO异常
    
    //读取一些字符并且储存到一个buffer数组中  
    //返回实际读取的字符数 如果返回-1 已到输入流的末尾
    read(char[] rea)  返回int类型  抛IO异常
    
    //关闭流释放资源
    close()   无返回值 抛IO异常
    
    //跳过n个字符不读  返回实际跳过的字节数
    skip(long n)   返回long类型  抛IO异常
    

    Writer 流
    //向输出流中写入一个数据
    write(int c); 无返回值 抛IO异常

    //将一个字符型的数组写入输出流
    write(char[] c);    无返回值 抛IO异常
    
    //将一个字符数组从指定位置开始(offset)的指定长度(length)个字符写入输出流
    write(char[] ,intoffset, int length);    无返回值 抛IO异常
    
    //将一个字符串中的字符写入到输出流
    write(String string); 无返回值 抛IO异常
    
    //将一个字符串从offset开始的length个字符写入到输出流
    write(String string,int offset, int length)    无返回值 抛IO异常
    
    //关闭流释放资源
    close();
    

    处理流
    1、缓冲流,缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加一些方法。
    缓冲流是指带有缓冲区的,缓冲区(Buffer)就是内存里面的一小块区域,读写时都把数据放到这块缓冲区域里面,减少io对于硬盘的访问次数。
    先把数据放置到缓冲区上,等到缓冲区满了以后,再 一次把缓冲区里面的数据写入硬盘或者读取出来。

    剩余内容整理中。。。

    相关文章

      网友评论

          本文标题:IO流相关

          本文链接:https://www.haomeiwen.com/subject/xlncoxtx.html