gpt4 book ai didi

java - java教科书帮助中的推回流示例。到底是怎么回事?

转载 作者:行者123 更新时间:2023-12-02 09:38:01 26 4
gpt4 key购买 nike

我正在我的java书中阅读这个例子:

// Demonstrate unread().

import java.io.*;

class PushbackInputStreamDemo {
public static void main(String args[]) {
String s = "if (a == 4) a = 0;\n";
byte buf[] = s.getBytes();
ByteArrayInputStream in = new ByteArrayInputStream(buf);
int c;

try ( PushbackInputStream f = new PushbackInputStream(in) )
{
while ((c = f.read()) != -1) {
switch(c) {
case '=':
if ((c = f.read()) == '=')
System.out.print(".eq.");
else {
System.out.print("<-");
f.unread(c);
}
break;
default:
System.out.print((char) c);
break;
}
}
} catch(IOException e) {
System.out.println("I/O Error: " + e);
}
}
}

Here is the output for this example. Notice that == was replaced by ".eq." and = was replaced by "<-".

if (a .eq. 4) a <- 0;

当到达单曲=时标志,它读取它,打印出 <-然后取消读取 =并将其放回 pushbackInputStream正确的?所以当它调用c = f.read()时,它收到 =又对吗?那么为什么我们不处于 <- 的无限循环中呢?符号?

最佳答案

while 循环包含两个可能的分支:一个当 = 时性格是遇到的,一劳永逸。对于其他场景,角色只是转储到控制台,因此不会创建无限循环。

对于我们遇到 = 的分支字符,然后它将从流中读取下一个字符(之后 = 字符)。如果下一个字符是第二个 =然后字符.eq.被转储到控制台,并且没有任何内容被推回 PushbackInputStream所以==序列已被完全消耗,当我们绕过while时再次循环它会找到 == 之后的内容。所以这种情况不会导致无限循环。

如果第一个字符之后的下一个字符 =不是第二个=然后字符<-被转储到控制台,然后该第二字符被推回到流中。执行while然后循环重新读取这个字符(因为我们已经知道它不是 = 字符)它将在 <- 之后立即转储到控制台。 。所以这种情况不会导致无限循环。

关于java - java教科书帮助中的推回流示例。到底是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57341113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com