初学Java,IO之推回输入流(四十四)

5月结婚的关系,这个月都没有时间翻一下书,学习一下Java,有损我学习Android的进度了,现在好不容易有了闲暇时间,马上来拉一下学习进度,呵呵~

推回输入流是什么,我一开始看名字就有点费解,看了几个例子,大概知道它可以在读取流的时候,改写流的内容,或者跳过某些字符不读,又或者只读取流的一部分(两个重要方法,read(),unread()),下面是它的概念,我觉得写的都有点晦涩难懂了


PushbackInputStream 向另一个输入流添加“推回 (push back)”或“取消读取 (unread)”一个字节的功能。这在以下情况下非常有用,即代码片段可以很方便地读取由特定字节值分隔的不定数量的数据字节;在读取终止字节后,该代码片段可以“取消读取”该字节,这样,输入流上的下一个读取操作将会重新读取被推回的字节。例如,表示构成标识符的字符的字节可能由表示操作符字符的字节终止;其作业只是读取标识符的方法可以进行读取,直到该操作看到此操作符,然后将该操作符推回以进行重读。


使用PushbackInputStream和其unread()方法来处理语言解析器关于处理“==”和“=”的区别。
package cn.xhh.io;
 
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.PushbackInputStream;
 
public class PushbackInputStreamTest {
 
    public static void main(String[] args) throws IOException {
 
        String str = "if ( a == 10) a = 0;\n";
        byte[] byt = str.getBytes();
        int c;
 
        ByteArrayInputStream bais = new ByteArrayInputStream(byt);
        PushbackInputStream pbis = new PushbackInputStream(bais);
 
        while ((c = pbis.read()) != -1) {
            switch (c) {
            case '=':
                if ((c = pbis.read()) == '=') {
                    System.out.print(".equ.");
                } else {
                    System.out.print("<-");
                    pbis.unread(c);
                }
                break;
            default:
                System.out.print((char) c);
                break;
            }
        }
 
    }
 
}
 
 
执行结果:
if ( a .equ. 10) a <- 0;


结论就是这个所谓推回输入流其用途就是用来处理输入流的数据的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值