(Java)回退流

文章目录

    • 一、基本概念
    • 二、操作回退流

一、基本概念

在 Java IO 中所有的数据都是采用顺序的读取方式,即对于一个输入流来说,都是采用从头到尾的顺序读取的。
如果在输入流中某个不需要的内容被读取进来,则只能通过程序将这些不需要的内容处理掉。为了解决这样的读取问题,在 Java 中提供了一种回退输入流(PushbackInputStream、PushbackReader),可以把读取进来的某些数据重新退回到输入流的缓冲区

回退流操作机制:
(Java)回退流_第1张图片
从图中我们可以看出对于不需要的数据可以使用 unread() 方法将内容重新送回到输入流的缓冲区。

PushbackInputStream 类的常用方法:
(Java)回退流_第2张图片
表中的三个 unread() 方法与 InputStream 类中3个read() 方法相对应,所以回退完全是针对于输入流进行操作

回退流与输入流相对应:
(Java)回退流_第3张图片

二、操作回退流

现在内存中有一个“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);//输出内容
            }
        }
    }
}

你可能感兴趣的:(Java,学习笔记)