zoukankan      html  css  js  c++  java
  • Java IO流

    首先上在网上找的InputStream和OutputStream的类图结构

    下面的是Reader 和Writer 的类图结构

    挑重点的讲解一下

    1.ByteArrayInputStream和ByteArrayOutputStream

    顾名思义,字节输入流和字节输出流,ByteArrayInputStream( ) 在构造输入流的时候传进去的是字节数组,通过read()或者read(byte[] b, int off, int len)方法读取单个字符,如果读到结尾返回-1.第二种是一次读取字节数组,而不是一个一个的读.

    ByteArrayOutputStream  字节数组输出流在内存中创建一个字节数组缓冲区,所有发送到输出流的数据保存在该字节数组缓冲区中

    没有带参的构造函数,有两个方法write(int b)和write(byte[] b, int off, int len)方法, 将字节数组的参数传进去,通过ByteArrayOutputStream.write( )方法将字节数组  输出到内存的字节数组缓冲区中.

    可以通过toByteArray()方法返回字节数组,writeTo(OutputStream out) 将缓冲区的字节数组写进 out 对象中

    2.FileInputStream和FileOutputStream

    最常用的IO流,FileInputStream(File f),File作为数据源,通过read() 单个读取字节,或者通过read(byte[ ] b)每次读取一个字节数组的长度.

    FileOutputStream(File f),通过write(byte[ ] b),write(int b)方法将字节数组或字节写入文件输出流.  这样可以实现文件的写操作.

    3.PipedInputStream 和 PipedOutputStream

    管道输入流和输出流,主要的作用是实现线程之间的输入和输出操作

    管道输入流应该连接到管道输出流;管道输入流提供要写入管道输出流的所有数据字节。通常,数据由某个线程从 PipedInputStream 对象读取,并由其他线程将其写入到相应的 PipedOutputStream。不建议对这两个对象尝试使用单个线程,因为这样可能死锁线程。管道输入流包含一个缓冲区,可在缓冲区限定的范围内将读操作和写操作分离开。如果向连接管道输出流提供数据字节的线程不再存在,则认为该管道已损坏。 

    在一个线程中通过PipedOutputStream的write()方法写进输入流,然后 在另一个线程中使用PipedInputStream.read()方法将输出流的内容读出来. 

    他们之间通过PipedOutputStream的connect(PipedInputStream in)或者PipedInputStream的connect(PipedInputStream  out)方法关联,实现 线程之间的流的传输.

     4.SequenceInputStream 

    序列输入流:表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。

    有两个构造方法   SequenceInputStream(Enumeration<? extends InputStream> e)  和 SequenceInputStream(InputStream s1, InputStream s2)

     要么是个输入流类型 的枚举类 或者 两个输入流  将枚举类或者 两个输入流 合并

    5.BufferedInputStream 和 BufferedOutputStream

    int read(byte[] b, int off, int len)
              从此字节输入流中给定偏移量处开始将各字节读取到指定的 byte 数组中。

    返回的是读取的字节数.

    处理流,节点流的inputStream传进来,进行装饰,实现更强大的功能,缓冲流主要是加一个默认为8192字节的缓存,放在内存中,通过flush()或者close(),将缓存一次性写到文件对象或字节数组对象中.或者一次性读到应用程序中 ,如果在inputStream 中的read(byte[ ] b)  b的大小和8192一样大,效率和BufferedInputStream  差不多 . 还有点不同的是inputstream 的read 方法是堵塞的,而bufferedinputStream 不是堵塞的.

    BufferedOutputStream的write()方法

    void write(byte[] b, int off, int len)
              将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流。

    void  write(int b)
              将指定的字节写入此缓冲的输出流

  • 相关阅读:
    Spring MVC Ajax 嵌套表单数据的提交
    Spring MVC 过滤静态资源访问
    Spring MVC 页面跳转时传递参数
    IDEA Maven 三层架构 2、运行 springMVC
    IDEA Maven 三层架构 1、基本的Archetype 搭建
    EasyUI DataGrid 基于 Ajax 自定义取值(loadData)
    Spring MVC Ajax 复杂参数的批量传递
    Mybatis Sql片段的应用
    在 Tomcat 8 部署多端口项目
    自动升级的设计思路与实现
  • 原文地址:https://www.cnblogs.com/stevehu1231/p/8440344.html
Copyright © 2011-2022 走看看