PushbackReader

在输入流中,有两个不同的流PushbackInputStream和PushbackReader。被叫做推回输入流,费了好长时间才弄明白是一个怎么回事。简单的理解:输入流,只能读取数据,不能写入数据;输出流,只能写入数据,而不能读取数据。推回流中提供了三个方法void unread(byte[] /char[] buf); void unread(byte[] int off,int len); void unread(int b); 好像改变了这种局面(可以读取输入流中数据,还可以向输入流中插入数据,重新读取数据等)! 

也许你可以把一个int数据推回,但是把数组推回输入流报错Exception in thread "main" java.io.IOException: Push back buffer is full

有一句话很重要,当创建PushbackInputStream或PushbackReader对象时,默认推回缓冲区长度为1,当你推回数据大于推回缓冲区大小时会报错。所有你可以显示定义推回缓冲区大小!

例:

import java.io.PushbackReader;
import java.io.StringReader;


public class Demo1 {
public static void main(String[] args) throws Exception {
char[] c = new char[2];
StringReader sr = new StringReader("hello,welcome to china!");
PushbackReader pr = new PushbackReader(sr,4);
/*
*  把“高亮”插入(推回到)输入流开始处。
*  因为推回缓冲区大小为4,“高亮”为两个,被推回的数据小于推回缓冲区大小,所有能够被推回。
*  当把推回缓冲区大小改变成1,将报Push back buffer is full异常。
*/
pr.unread("高亮".toCharArray());
int n=0;
int i=1;
while((n=pr.read(c))!=-1){
String str = new String(c,0,n);
i++;
if(i==6){//把we推回到输入流缓冲区,重新读取
pr.unread(c);
}
System.out.print(str);
}
sr.close();
pr.close();
}
}


注意:我们在上面定义的char[] c 并不是推回流缓冲区大小,创建new PushbackReader(sr,4);对象时的4才是推回流缓冲区大小。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值