初学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;


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


你可能感兴趣的:(java,android,IO,String,import,作业)