53.黑马程序员-IO流-其他流

来源:互联网 发布:正规淘宝客服怎样应聘 编辑:程序博客网 时间:2024/06/06 18:41

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

    一、管道流(把输入流、输出流连接起来的流)
  • 输入流和输出流传递数据需要中转站,可以是数组,也可以是管道流。
    • PipedInputStream
    • PipedOutputStream
    • 输入输出可以直接进行连接(两根管道接在一起),通过结合线程使用,单线程会造成死锁。
    二、RandomAccessFile(下载软件使用这个对象)
  • 功能是支持对随机访问文件的读取和写入。
  • 结尾不是父类名,继承自Object,自成一派。但是IO包中成员
  • 完成读写的原理是:内部封装了输入、输出流。
  • 内部封装了一个数组,通过指针操作这个数组。通过getFilePointer获取指针位置,seek改变指针位置。
  • 局限性: 不能操作其他设备。 只能操作文件,操作文件有四种模式“R”,"W",“RWS”,“RWD”。
  • 特性:可以在任何地方开始读写,可以多个线程操作多个读写就是下载软件的原理。
    三、DataInputStream、DataOutputStream(操作基本数据的流)
  • DataInputStream:数据输入流。
    • 允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。
    • 应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。 
  • DataOutputStream:数据输出流
    • 允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。 
    四、ByteArrayInputStream、ByteArrayOutputStream(操作字节数组的流)
  • 字节数组流概念
    • ByteArrayInputStream:在构造的时候,需要接受一个数据源,而且数据源是一个字节数组。
    • OutputStream:在构造的时候,不需要定义数据目的,因为该对象中已经内部封装了可变长度的字节数组。这就是数据目的地。
    • 所以这两个流对象都是操作的数组,并没有使用系统资源。
    • 所以,不用像其他流一样关闭,并且不会抛出IO异常。
  • InputStream、 OutputStream本身就封装了操作字节的方法,那么字节数组流出现有什么意义?
    • 流设备操作规律:
      • 源设备:键盘System.in 硬盘FileStream 内存ArrayStream
      • 目的设备: 键盘System.Out 硬盘FileStream 内存ArrayStream
    • ArrayStream源和设备都是内存,也可以使用其他源、目的
    • 源是硬盘,目的是内存时,就使用 ArrayStream。
    • 用流的读写方法来操作数组。
    五、CharArrayReader、CharArrayWriter(操作字符数组的流)
  • 字符数组流概念
    • CharArrayReader :在构造的时候,需要接受一个数据源,而且数据源是一个字符数组。
    • CharArrayWriter :在构造的时候,不需要定义数据目的,因为该对象中已经内部封装了可变长度的字符数组。这就是数据目的地。
    六、StringReader、StringWriter(操作字符串的流)
  • 雷同于字节字符数组流