一、基本概念
在 Java IO 中所有的数据都是采用顺序的读取方式,即对于一个输入流来说,都是采用从头到尾的顺序读取的。
如果在输入流中某个不需要的内容被读取进来,则只能通过程序将这些不需要的内容处理掉。为了解决这样的读取问题,在 Java 中提供了一种回退输入流(PushbackInputStream、PushbackReader),可以把读取进来的某些数据重新退回到输入流的缓冲区
回退流操作机制:
从图中我们可以看出对于不需要的数据可以使用 unread() 方法将内容重新送回到输入流的缓冲区。
PushbackInputStream 类的常用方法:
表中的三个 unread() 方法与 InputStream 类中3个read() 方法相对应,所以回退完全是针对于输入流进行操作
回退流与输入流相对应:
二、操作回退流
现在内存中有一个“www.Helloworld.cn
”的字符串,只要输入的内容是“.
”则执行回退操作,即不读取".
"
import java.io.ByteArrayInputStream;
import java.io.PushbackInputStream;
public class Test{
public static void main(String[] args) throws Exception{
String str = "www.helloworld.cn";
PushbackInputStream push = null;//定义回退流对象
ByteArrayInputStream bai = null;//定义内存输入流
bai = new ByteArrayInputStream(str.getBytes());//实例化内存输入流
push = new PushbackInputStream(bai);//实例化回退流对象
System.out.print("读取之后的数据为:");
int temp = 0;//接收数据
while ((temp = push.read())!=-1){
if (temp == '.'){
push.unread(temp);//回退到缓冲区前面
temp = push.read();//空出此数据
System.out.print("(退回" + (char)temp + ")");
}else {
System.out.print((char)temp);//输出内容
}
}
}
}