没有推回输出流
package day9yue11;
import java.io.*;
public class PushbackTest {
public static void main(String[] args) throws Exception {
//先创建文件回推流对象pr,缓冲为64
PushbackReader pr = new PushbackReader(new FileReader("d:\\test.txt"), 64);
//创建取水的竹筒
char[] ch = new char[32];
//用于保存上次ch取的水
String lastContent="";
//用于保存本次取水的长度
int hasRead = 0;
//开始循环取水了
while((hasRead = pr.read(ch)) >0)
{
//每次取得水,全部转成字符串 content
String content = new String(ch,0,hasRead);
//用于标记 “new PushbackReader” 在字符串中的位置
int targetIndex = 0;
//如果new PushbackReader存在于拼接字符串里面,那么标记好存在的位置,同时执行选择语句
if((targetIndex = (content+lastContent).indexOf("new PushbackReader"))>0 )
{
//把拼接的字符串推回到流的缓冲 64字符里面,推回前要转化成字符数组,因为是字符流,都是以字符数组操作
pr.unread((content+lastContent).toCharArray());
//如果“new PushbackReader” 在字符串组合里面大于32的,那么读取字符串“new PushbackReader”之前的内容char[32]是不够的
if(targetIndex>32)
{
ch = new char[targetIndex];
}
//开始读取推回的,并且是“new PushbackReader” 前面的内容,因为下标和长度已经确定好了
//从推回字符串的下标0开始读取,读取长度是targetIndex
pr.read(ch,0,targetIndex);
System.out.println(new String(ch,0,targetIndex));
System.exit(0);
}
else
{
System.out.println(lastContent);
//这一步很重要,持续交换,新读取的内容保存在lastContent ,,这样能保证lastContent是最后一次读取的东西
lastContent = content;
}
}
pr.close();
}
}