Как проверить последовательности ANSI / Terminal Control из InputStream? - PullRequest
0 голосов
/ 02 марта 2020

Я создаю простой эмулятор терминала, используя библиотеку pty4j . В моей программе есть метод print(), который отображает текст на холсте с помощью метода GraphicsContext.fillText() из javafx. Я подключаю эмулятор к экземпляру cmd и читаю исходящий вывод из буферизированного ридера. Теперь, к сожалению, когда он получает текст, он также включает ANSI-escape-символы (см. Изображение). Однако, если я распечатываю вывод в IDE или системную консоль, он работает нормально.

enter image description here

Я попытался использовать метод readLine() из BufferedReader, а затем применяя регулярное выражение, но поскольку не все входные данные, полученные от терминала, завершаются символом \n, который он блокирует в последней строке.

Thread terminalReaderThread = new Thread() {
   public void run() {
      try {
         int c;
         while (terminal.isRunning() && (c = terminal.getReader().read()) != -1) {
            if(c != 0){
               print(Character.toString((char)c));
            }
         }

      } catch (IOException e) {
         e.printStackTrace();
      }
  }
};
terminalReaderThread.start();

Существует ли эффективный способ отфильтровать эти escape-коды из inputStream?

...