为 java 中的输入流设置侦听器

setting listener for an input stream in java

这只是一个例子。 我有一个输入流,我想为它设置一个监听器。我该怎么做。 第一种方法是创建一个反复检查它的后台线程。

Thread thread = new Thread() {
    public void run() {
        while(true) {
            Thread.sleep(100);
            //optional sleep to avoid wasting cpu cycles
            int c;
            if((c = in.read()) != -1)
                addEventToUIthread(c);
        } 
    } 
} 

但我认为没有 Thread.sleep 它会浪费 cpu 个周期。 和它一起;它会降低获取事件的准确性。 假设输入流是一个不可访问的输出流正在写入的文件。 这只是一个例子来说明我不知道这种后台线程的运行时成本。 请解释一下。

如果你想立即读取输入字节,你不需要在这里使用Thread.sleep来保护CPU循环,因为InputStream.read()方法是同步运行的,在其他情况下换句话说,它会阻塞直到有一个字节可用。

但是,如果您想在读取数据时故意减慢 CPU 使用速度,使用 Thread.Sleep 将是正确的方法。

如果您希望您的程序在文件到达末尾后继续读取文件,尝试之间没有任何暂停,那么从 read() 函数 returns -1 第一次开始,直到新数据到达的那一刻,您的程序将使用所有可用的 CPU 时间,因为它只会来回返回到 read() 函数,这不是后台操作。

其他只包含前台操作的循环也是如此。