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)
              将指定的字节写入此缓冲的输出流

  • 相关阅读:
    iOS中的导航条UINavigationController(UISegmentedControl)的基本使用(界面中传值的3中方法,单例,属性,代理)
    iOS中的分页控件(UIPageControl)
    iOS中的UIScorllView(滑动控件,时机控制)的基本使用
    iOS中ScrollView(滚屏,引导界面,和判段是否是第一次登陆)
    iOS中自定义UIView(用接口获取Lable和TextFile中的值)
    iOS中的手势识别的积累:UIGestureRecognizer(轻拍手势,长按手势,清扫手势,平移手势,捏合手势,旋转手势,屏幕边缘平移手势) ----仿射变换
    iOS中纯手工图片浏览器
    IOS中的TOM(解决缓存,图片加载)
    iOS中的NSString引用计数问题(-1和整数最大值)
    iOS中的内存管理精讲
  • 原文地址:https://www.cnblogs.com/stevehu1231/p/8440344.html
Copyright © 2011-2022 走看看