Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java缓冲读取器在逐字节读取时出现口吃_Java_Android_Shell_Android Studio - Fatal编程技术网

Java缓冲读取器在逐字节读取时出现口吃

Java缓冲读取器在逐字节读取时出现口吃,java,android,shell,android-studio,Java,Android,Shell,Android Studio,我刚刚编写了一个小的Android应用程序,需要从程序输出读取数据并实时显示。经过很多时间,我终于做了一件简单的事情,用一个正在逐字节读取的缓冲读取器读取Inputstream。但不知何故,当有很多东西被显示时,它会挂起在某个特定的状态,并开始结巴很多。因此,不是全部100行都显示出来,而是先显示10行,然后在一分钟后显示所有其他行。有办法解决这个问题吗?我正在运行Android Studio 3金丝雀预览版。附加了将标准输出打印到文本视图的代码 public void stdout(final

我刚刚编写了一个小的Android应用程序,需要从程序输出读取数据并实时显示。经过很多时间,我终于做了一件简单的事情,用一个正在逐字节读取的缓冲读取器读取Inputstream。但不知何故,当有很多东西被显示时,它会挂起在某个特定的状态,并开始结巴很多。因此,不是全部100行都显示出来,而是先显示10行,然后在一分钟后显示所有其他行。有办法解决这个问题吗?我正在运行Android Studio 3金丝雀预览版。附加了将标准输出打印到文本视图的代码

public void stdout(final InputStream i){
    Runnable r = new Runnable() {
        @Override
        public void run() {
            TextView m = (TextView) findViewById(R.id.textView3);
            m.setMovementMethod(new ScrollingMovementMethod());
            BufferedReader br = new BufferedReader(new InputStreamReader(i));
            int line;
            try{
                while(true){

                    line = br.read();
                    if (line == -1)
                    {
                        break;
                    }
                    else
                    {

                        final StringBuilder b = new StringBuilder();
                        final int finalLine = line;
                        b.append(String.valueOf((char)finalLine));
                        final String t = b.toString();
                        m.post(new Runnable(){
                            @Override
                            public void run(){
                                TextView m = (TextView) findViewById(R.id.textView3);
                                m.append(t.toString());

                            }
                        });

                    }
                }
            }
            catch (Exception e)
            {
                m.setText("error" + e.toString());
            }
        }
    };

    new Thread(r).start();
}

您是否尝试过使用publishProgress方法执行实际的m.append(t.toString());,将所有这些放在asyncTask中?一个新的可运行的字符是疯狂的。有没有其他想法可以在Android上用Java实时读取进程输出???User3793589我将尝试异步任务。@EJP我知道,但如果没有提供输出,我将错过chars,因为它将在末尾停止。
line=br.read()。你把它叫做线。但是你只读一个字符。大而笨重的然后为每个字符启动一个runnable。坏主意。为一个字符构造StringBuilder是没有意义的。更改为String line=br.readLine();