JAVA中IO流中的推回输入流

要知道,Java中IO流,读取输入流中的内容,是从头到尾顺序读取的,前面读取过的就不会在读取了,所以如果还想读取前面的数据的话,就要用到推回输入流了(PushbackInputStream或PushbackReader)。
例子:

// 创建输入流管道
Reader reader = new FileReader("D:/java/IO流测试/IOReader2.txt");
//  创建推回输入流并指定推回缓冲区大小为5,如果不指定,默认缓冲区大小为1。
PushbackReader push = new PushbackReader(reader,5);//该缓冲区大小不能小于被推回的数据,也就是现在的缓冲区只能存放5个字符,如若超出会报缓冲区溢出的异常。
char[] char2 = new char[5];	//创建长度为5的字符数组
System.out.println(push.read(chars));	//把输入流中读取到的数据存储进数组中
push.unread(char2);	//把char2数组推回缓冲区中
char[] char3 = new char[5];	//在创建长度为5的字符数组
System.out.println(push.read(char3));	//先读取缓冲区内的数据,所以读取到了之前推回缓冲区的那5个字符。

其实简单来讲就是:
unread(char[] cbuf):将数组推回缓冲区(复制到缓冲区)中,使得下一个读取,会读取缓冲区里面的数据(字符)。
但读取完缓冲区的数据后,下一个读取又会回到之前记录指针记录到的位置开始。
例如:
输入流内有ABCDEFGHIJKLMNOPQRSTUVWXYZ个字符数组A长度为5读取了5个字符[ABCDE],数组B长度为5读取了5个字符[FGHIJ],然后在这把数组A推回缓冲区,也就是说缓冲区现在有5个字符分别是ABCDE,那么后面读取到的将会是缓冲区内的字符,也就是后面的数组C长度为5读取到的字符5个字符是缓冲区里面的[ABCDE],而把缓冲区内的字符读取完后,后面的数组D长度为5读取到的是之前记录指针记录到的位置读取后面的5个字符[KLMNO]。而如果长度为5的数组A读取了5个字符[ABCDE],长度为5的数组B读取了5个字符[FGHIJ],然后在这把数组A推回缓冲区,后面长度为3的数组C读取了缓冲区的3个字符[ABC],长度为5的数组D读取到的是缓冲区内还剩下的两个字符和接上之前记录指针记录到的位置开始读取后面的三个字符[DEKLM]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值