java输入输出(6)退回输入流

  • java中可以把数据推回输入流,使得数据可以再次被读取,以下程序的功能为寻找指定字符串“new PushBackReader”,当匹配不到指定字符串的时候,将当前遍历到的字符串输出,如果匹配到指定的字符串,将其推回到输入流,然后再次读取输出,具体的代码讲解穿插在代码之中
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.PushbackReader;
    
    public class PushBackTest {
        public static void main(String args[]){
            try{
                PushbackReader pushBackReader = new PushbackReader(new FileReader("src//PushbackTest.java"),64);
    //            实例化一个PushbackReader对象,并指定推回缓冲区的长度为64
                {
                    char[]buf =new char[32];
                    String lastContent = "";
    //                lastContent为最新遍历到字符串
    
                    int hasReader = 0;
                    while((hasReader = pushBackReader.read(buf))>0){
    //                read方法在前面有讲过,将输入流的内容存储到指定的数组中,返回实际存储的长度
    
                        String content = new String(buf, 0, hasReader);
    //                    将存储的数据转换为字符串
    
                        int targetIndex = 0;
    //                    “目标下标”,下文将用这个作为旗帜来判断是否遍历到了目标字符串
    
                        if((targetIndex = (lastContent + content).indexOf("new PushBackReader"))>0){
    //                        这个判断条件就是看当前字符串和上一个遍历的字符串是否包含目标字符串
    
                            pushBackReader.unread((lastContent + content).toCharArray());
    //                        如果包含目标字符串,将其推回到缓冲区中
    
                            int len = targetIndex > 32 ? 32 : targetIndex;
    
                            pushBackReader.read(buf, 0, len);
    //                         将推回到缓冲区的目标字符串读取出来
                            System.out.println(new String(buf, 0, len));
                            System.exit(0);
                        }
                        else {
                            System.out.println(lastContent);
                            lastContent = content;
                        }
                    }
                }
    
    
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
    //程序输出结果如下
    //        D:\JDK\bin\java.exe "-javaagent:D:\IntelliJ IDEA Community Edition 2018.2.2\lib\idea_rt.jar=53707:D:\IntelliJ IDEA Community Edition 2018.2.2\bin" -Dfile.encoding=UTF-8 -classpath D:\JDK\jre\lib\charsets.jar;D:\JDK\jre\lib\deploy.jar;D:\JDK\jre\lib\ext\access-bridge-64.jar;D:\JDK\jre\lib\ext\cldrdata.jar;D:\JDK\jre\lib\ext\dnsns.jar;D:\JDK\jre\lib\ext\jaccess.jar;D:\JDK\jre\lib\ext\jfxrt.jar;D:\JDK\jre\lib\ext\localedata.jar;D:\JDK\jre\lib\ext\nashorn.jar;D:\JDK\jre\lib\ext\sunec.jar;D:\JDK\jre\lib\ext\sunjce_provider.jar;D:\JDK\jre\lib\ext\sunmscapi.jar;D:\JDK\jre\lib\ext\sunpkcs11.jar;D:\JDK\jre\lib\ext\zipfs.jar;D:\JDK\jre\lib\javaws.jar;D:\JDK\jre\lib\jce.jar;D:\JDK\jre\lib\jfr.jar;D:\JDK\jre\lib\jfxswt.jar;D:\JDK\jre\lib\jsse.jar;D:\JDK\jre\lib\management-agent.jar;D:\JDK\jre\lib\plugin.jar;D:\JDK\jre\lib\resources.jar;D:\JDK\jre\lib\rt.jar;E:\JavaProject\FileOperatins\out\production\FileOperatins PushBackTest
    //
    //        import java.io.FileReader;
    //        impo
    //        rt java.io.IOException;
    //        import
    //        java.io.PushbackReader;
    //
    //        publi
    //        c class PushBackTest {
    //    publ
    //    ic static void main(String args[
    //                                ]){
    //        try{
    //            P
    //            ushbackReader pushBackReader = n
    //            ew PushbackReader(new FileReader
    //                    ("src//PushbackTest.java"),64);
    //
                实例化一个PushbackRead
    //            er对象,并指定推回缓冲区的长度为64
    //
    //            {
    //                char[]buf =n
    //                ew char[32];
    //                St
    //                ring lastContent = "";
          
    //                lastContent为最新遍历到字符串
    //
    //
    //                int hasReader
    //                        = 0;
    //                while((has
    //                Reader = pushBackReader.read(buf
    //                ))>0){
                    read方法
    //                在前面有讲过,将输入流的内容存储到指定的数组中,返回实际存储的长
    //                        度
    //
    //                String
    //                        content = new String(buf, 0, has
    //                        Reader);
                        
    //                将存储的数据转换为字符串
    //
    //
    //                int targetIndex = 0;
        
    //                “目标下标”,下文将用这个作为旗
    //                        帜来判断是否遍历到了目标字符串
    //
    //
    //                if((targetIndex = (lastCo
    //                ntent + content).indexOf("
    //
    //                        Process finished with exit code 0
    

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值