Java流概述

1. 输入/输出流

Java语言定义了许多类专门负责各种方式的输入/输出,这些类都被放在java.io包中。其中,所有输入流类

输入流类输出流类
都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类都是抽象类OutputStream (字节输出流)或抽象类 Writer (字符输出流)的字类

字节流和字符流的区别:

  • 每次读写的字节数不同;
  • 字符流是块读写,字节流是字节读写
  • 字符流带有缓存,字节流没有

java流在处理上分为字符流和字节流。字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。

字符流和字节流,一个属性范围小,一个属性范围大,字符流只能是字符这一种类型,但是字节流中可以是字符,可以是二进制文件,可以是音频,可以是各种各样的类型,只要符合字节形式存储的都可以接字节流,而字符流只能接字符

1.1 输入流

InputStream类是字节输入流的抽象类,是所有字节输入流的父类。该类中所有方法遇到错误时都会引发IOException异常。下面是该类中一些方法的介绍:

方法说明
read()从输入流中读取数据的下一个字节。返回0~255范围内的int字节值。如果因为已经到达流末尾而没有可用的字节,则返回值为-1
read(byte[] b)从输入流中读入一定长度的字节,并以整数的形式返回字节数
mark(int readlimit)在输入流的当前位置放置一个标记,readlimit参数告知此输入流在标记位置失效前允许读取的字节数
reset()将输入指针返回到当前所作的标记处
skip(long n)跳过输入流上的n个字节并返回实际跳过的字节数
markSupported()如果当前流支持mark()/reset()操作就返回true
close()关闭此输入流并释放与该流关联的所有系统资源

InputStream类的具体层次结构如下图所示:

在这里插入图片描述
并不是所有的InputStream类的子类都支持InputStream中定义的所有方法,如skip()、mark()、reset()等方法只对某些子类有用。

InputStream类是用来处理字节的,并不适合处理字符文本,Java为字符文本的输入专门提供了一套单独的类Reader,但Reader类并不是InputStram类的替换者,只是在处理字符串时简化了编程。Reader类是字符输入流的抽象类,所有的字符输入流的实现都是它的子类。Reader类的具体层次结构如下:
在这里插入图片描述

1.2 输出流

OutputStream类是字节输出流的抽象类,此抽象类是表示输出字节流的所有类的超类。OutputStream类的具体层次如图所示:
在这里插入图片描述
OutputStream类中的方法均返回void,在遇到错误时会引发IOException异常。下面对OutputStram类中的方法作简单介绍。

方法介绍
write(int b)将指定的字节写入此输出流
write(byte[] b)将b个字节从指定的byte数组写入此输出流
write(byte[] b, int off, int len)将指定byte数组中从偏移量off开始的len个字节写入此输出流
flush()彻底完成输出并清空缓存区
close()关闭输出流

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值