JavaI/O流

为什么需要I/0流

  1. 当我们的程序需要从硬盘,网络,或其他应用程序中读取或写入数据时候,数据传输量可能很大,而我们的内存或带宽有限,无法一次性读取获取写入大量数据。
  2. 而流(Stream)可以实现一点一点的逐步传输数据。
  3. 想想我们是怎样下载一个大文件的, 下载软件(例如x雷)并不会占用你内存很大的空间, 而只是在内存划分一个缓冲区, 一点一点地下载到自己的内存(缓冲区满了再写到硬盘),。

Stream

  1. Stream是一个java类,这个类用于java程序和外部设备之前的输入输出操作。
  2. 所谓外部设备可以是硬盘上的文件,也可以是网络设备,或其他java程序。
  3. 在java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为“流”(stream)。通过流的形式允许java程序使用相同的方式来访问不同的输入/输出源。stream是从起源(source)到接收的(sink)的有序数据。
  4. 如下图,输入输出流就像连接程序和水缸的管道,让水流一点点通行。

I/O流的分类

  1. I/O流具体的分类
    • 从流的方向划分:分为 输入流输出流
    • 从流的传输单位划分: 分为 字节流(8位字节),字符流(16位的字符)
    • 从流的角色划分: 分为 节点流处理流
      • 节点流是直接连接数据源的流,可以直接向数据源(特定的IO设备,如硬盘,网络,其他程序)读写数据
      • 处理流通过构造方法接收一个节点流,对节点流使用装饰者模式增加更多的功能,处理流必须依赖于一个节点流,因为只有节点流最终可以将数据流输入输出到IO设备中。
  2. Java将所有传统的流类型都放在Java.io包下,用于实现输入和输出功能。
  3. 该包下的流的类非常多,初学者非常容易混淆,但我们始终记住,java的I/0存在4大基类,而所有的IO流实现类,都是其子类。

 

I/O流架构体系

 

 

这个缺少一个继承自Writer基类的PrinterWriter

节点流--直接连接数据源的流

 

常见的节点流

 

  1. File 文件流。对文件进行读、写操作 :FileReader、FileWriter、FileInputStream、FileOutputStream。
  2. 从/向内存数组读写数据: CharArrayReader与 CharArrayWriter、ByteArrayInputStream与ByteArrayOutputStream。
  3. 从/向内存字符串读写数据 StringReader、StringWriter、StringBufferInputStream。
  4. Pipe管道流。 实现管道的输入和输出(进程间通信): PipedReader与PipedWriter、PipedInputStream与Pip
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值