我正在尝试从后缀输入构建语法。这是我当前的代码,还不够快。 t是BufferedInputStream对象,readNext()读取输入中的下一个数字。
有什么想法可以优化这段代码的性能,或者另一种更快的实现方式?
for(int j = t.read();t.available()>0;j=t.read()) {
if(j==32) continue;
if(j==43||j==45||j==42||j==47) {
Node i = stack.pop();
Node k = stack.pop();
stack.push(new Node(k,i,j));
}else {
int number = readNext(j);
stack.push(new Node(number));
}
}
答案 0 :(得分:0)
请勿使用.available()
。这是一个奇怪的方法。它按照其规范所说明的去做,但是如果您仔细阅读该规范,就会意识到它所做的实际上是无用的。具体而言,即使流尚未关闭,available()
仍可以返回0。 (这是很简单的,可以通过阅读标准输入而不花一会儿时间来显示)。检测输入结束的正确方法是检查read()
返回的数字:流结束时它将返回-1
。
关于您的问题:此代码中的所有内容都不慢。因此,它要么已经尽可能快地运行了,要么您正在读取的输入流具有固有的效率低下,我无法告诉您,因为您没有显示代码的那一部分,或者{{1} }方法是缓慢的原因。