0

这有点难以解释。我对此事进行了一些谷歌搜索,但没有发现任何似乎有帮助的东西。现在,我不知道是不是我的电脑限制了 IDE,(6gb ram,AMD A10-5745M APU 2.10GHz,Windows 8 64 位,目前看来 IDE 可以使用的最大容量是 495M,虽然它从未超过 70M)在进一步解释问题之前,我将分享我的代码:到目前为止我写的唯一的东西。

public void readText(String text){
      String textArray[]= new String[text.length()];
        for(int b = 0; b <text.length(); b++){
            String countText = text;
            textArray[b] = countText.substring(b,b+1);
        }

        for(int countPrint = 0; countPrint < textArray.length; countPrint++){
            System.out.print(textArray[countPrint]);
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();  
            }
        }
    }

所以基本上,我的方法所做的是,它以延迟的间隔逐个字符地读取文本。所以如果我调用readText("Hello");它会打印H(wait 50 ms) e(wait 50 ms) l(etc.) 等等,所以看起来有人在打字。(我打算使用计时器,但通过谷歌搜索和从这个站点,我发现它Thread.sleep(number)更容易设置,并且占用的空间更少)

现在我已经解释了所有内容,问题是它并没有完全逐个字符地显示它,一旦我降低到更短的毫秒,比如 50。我选择,比如说,800 毫秒,它可以很好地读取每个字符,它几乎每秒吐出 1 个。但它变得越快,它就越结块。假设我有一句话“你好,我的狗是黄色的,我的草坪是粉红色的”。如果要Thread.sleep(50)像代码一样打印它,它将(而不是单独打印每个字符(尽管非常快))以块的形式打印chunk1(Hel) chunk2(lo, my) chunk3(dog i) chunk4(s yello)等等。现在,我知道我已经将其范围缩小到 IDE,因为当我在 Eclipse 中运行相同的代码时,它几乎可以完美打印(有时会打印块,但是当它打印时,它只有 2 个字符,而不是 5 或 6 个与 Jidea)我没有尝试使用 Eclipse 更快的速度,但 50 毫秒似乎并没有过多地打扰它,当然比前者运行得更精确。关于为什么它不会“实时”打印它本身的任何想法?

4

1 回答 1

0

我对您的问题的最佳猜测是由于输出缓冲。

System.out被缓冲(即,当您调用 print 时,它不一定会立即写入终端,但可以选择延迟写入,或将多个打印调用批处理到一个控制台写入中)。

您可以尝试在每个字符后发出flush( ie System.out.flush()),看看是否有帮助,但可能没那么简单。

我会犹豫是否过多担心终端 I/O 在 IDE 中发生的速度。有很多事情可以在其中发挥作用,而且通常不是您需要关心的事情。如果您确实关心,那么您最好从命令行运行而不是从 IDE 内部运行。

于 2013-10-24T06:48:47.767 回答