Java推回输入流
开发工具与关键技术:My Eclipse 10、Java
作者:郑凯丰
撰写时间: 2019年5月6日
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
推回输入流
读取数据都是顺序读取如果读取到不想要的数据可以把数据推回到输入流的缓冲区。
推回输入流主要为两个类: PushbackInputStream 和 PushbackReader;
代码
import java.io.FileReader;
import java.io.IOException;
import java.io.PushbackReader;
import java.io.Reader;
public class PushbackReaderDemo {
public static void main(String[] args) throws IOException {
//创建字符输入流
Reader reader1=new FileReader("E:/z/Ostrch.java");
//创建推回输入流 指定推回缓冲区大小为64,
//如果不指定,默认缓冲区大小为1
PushbackReader reader=new PushbackReader(reader1,64);
char[] cs =new char[32];//临时数组
int count=0;//读取的字符数
String strLast="";//记录上次读取的字符串
while ((count =reader.read(cs,0,cs.length))!=-1){
//本次读取内容
String str=new String(cs,0,count);
//上次+本次读取内容--避免 要查找的字符串被截取
String StrContent=strLast+str;
//查找目标字符串
//目标出现位置
int targetIndex =StrContent.indexOf("//字符型 char");
if(targetIndex>-1){
//找到目标字符串
//将本次内容和上次内容一起推回缓冲区
//*****推缓冲区的内容大小不能超过缓冲区的大小
reader.unread(StrContent.toCharArray());
//判断targetIndex 是否>32(临时数组大小)
if(targetIndex>32){
cs=new char[targetIndex];
}
//再次读取指定长度的内容(就是目标字符串之前的内容)
reader.read(cs,0,targetIndex);
str=new String(cs,0,targetIndex);
System.out.println(str);
break;
}else{
//为找到目标字符串
//直接输出
System.out.println(strLast);
strLast=str;
}
}
}
}
代码演示结果:
读取了文档里面的数据然后输出,如果不是你想要的则可以推回到缓冲区;
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190424175943878.png)