2

为什么将字节推回流中是件好事?当我处理流时,我可以忽略字节或者我可以修改它,如果我想这样做的话:

    try(InputStream is = new FileInputStream("test.txt")){

        int aByte;
        char c;

        while((aByte = is.read()) != -1){

            c = (char)aByte;

            if(c == 'h') {
               c = 'X';
            }

            System.out.print(c);
        }

我检查了 javadocs,但我仍然不明白为什么在某些情况下我应该将数据放回流中。对不起,伙计们。

4

1 回答 1

1

推回与向前窥视的选项有关,并且测试某些条件是真还是假。如果为 false,您希望继续前进,就好像您没有提前达到峰值一样,因此您必须将流向后推,就像您往前看一样。否则,您可以更换前面的峰值部分并从那里继续。

[参见] http://tutorials.jenkov.com/java-io/pushbackinputstream.html

[或] http://www.java-samples.com/showtutorial.php?tutorialid=390

[或] 书:“Herbert Schildt 的完整参考资料第 2 部分”。

PushbackInputStream 旨在用于解析来自 InputStream 的数据。有时您需要提前读取几个字节以查看即将发生的内容,然后才能确定如何解释当前字节。PushbackInputStream 允许您这样做。好吧,实际上它允许您将读取的字节推回流中。下次调用 read() 时将再次读取这些字节。——延科夫——

int c; 
while ((c = f.read()) != -1) { 
  switch(c) { 
  case '=': 
  if ((c = f.read()) == '=') {
    System.out.print(".eq."); 
  } else { 
    System.out.print("<-"); 
  f.unread(c); 
  } 
}

这样,您就可以留在阅读的流程中。

注意:PushbackInputStream 具有使用于创建它的 InputStream 的 mark( ) 或 reset( ) 方法无效的副作用。使用 markSupported( ) 检查您将使用 mark( )/reset( ) 的任何流。--www.java-samples.com--

于 2014-09-01T07:53:20.583 回答