Java中关于流的分类&字节流

流的分类
一、流分类
1、按方向:输入流、输出流
2、按处理的最小单元划分:字节流(byte)、字符流(char)
3、按照是否直接和目标接触划分:节点流,处理流
(一)、流的分类

  • 1.输入流和输出流
    按照流的流向来分,可以分为输入流和输出流。输入、输出都是从程序运行所在内存的角度来划分的。
  • 输入流:只能从中读取数据,而不能向其写入数据。由InputStream和Reader作为基类
  • 输出流:只能向其写入数据,而不能从中读取数据。由OutputStream和Writer作为基类
  • 2.字节流和字符流
    字节流和字符流的用法几乎完全一样,区别在于字节流和字符流所操作的数据单元不同。
  • 字节流操作的数据单元是字节byte,由InputStream和OutputStream作为基类。
  • 字符流操作的数据单元是字符char,由 Reader和 Writer作为基类。
  • 3.节点流和处理流
    按照流的角色来分,可以分为节点流和处理流。
  • 节点流:可以从向一个特定的IO设备(如磁盘、网络)读/写数据的流。
  • 处理流:用于对一个已存在的流进行连接或封装,通过封装后的流来实现数据读/写功能。
  • 使用处理流的优势:
  1. 对开发人员来说,使用处理流进行输入/输出操作更简单;
  2. 使用处理流的执行效率更高。
    二、流的概念模型
    Java的IO流共涉及40多个类,这些类看上去芜杂而凌乱,但实际上非常规则,
    而且彼此之间存在非常紧密的联系Java的IO流的40多个类都是从如下4个抽象基类派生的。
  • InputStream/Reader:所有输入流的基类,前者是字节输入流,后者是字符输入流。
  • OutputStream/Writer:所有输出流的基类,前者是字节输出流,后者是字符输出流
    对于InputStream和Reader而言,它们把输入设备抽象成一个“水管”,这个水管里的每个“水滴”依次排列:
    对于OutputStream和Writer而言,它们同样把输出设备抽象成一个“水管”,只是这个水管水滴的方向不同。
    字节流
    字节流和字符流的操作方式几乎完全一样,区别只是操作的数据单元不同而已。
    字节流操作的数据单元是字节,字符流操作的数据单元是字符。

(一)、InputStream

InputStream和Reader是所有输入流的抽象基类,它们的方法是所有输入流都可使用的方法。
InputStream类的方法

修饰符/返回值类型方法名说明
intavailable()返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。
voidclose()关闭此输入流并释放与该流关联的所有系统资源。
voidmark(int readlimit)在此输入流中标记当前的位置。
booleanmarkSupported()测试此输入流是否支持 mark 和 reset 方法。
abstract intread()从输入流中读取数据的下一个字节。
intread(byte[] b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
intread(byte[] b, int off, int len)将输入流中最多 len 个数据字节读入 byte 数组。
voidreset()将此流重新定位到最后一次对此输入流调用 mark 方法时的位置。
longskip(long n)跳过和丢弃此输入流中数据的 n 个字节。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值