首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从InputStream中复制ANSI/终端控制序列?

如何从InputStream中复制ANSI/终端控制序列?
EN

Stack Overflow用户
提问于 2020-03-01 22:46:28
回答 1查看 107关注 0票数 0

我正在使用pty4j库构建一个简单的终端模拟器。我的程序有一个print()方法,它使用javafx的GraphicsContext.fillText()方法将文本呈现到画布上。我将模拟器连接到cmd的一个实例,并从缓冲的读取器中读取ouptput。现在,不幸的是,当它收到文本时,它还包括ANSI-转义字符 (见图)。但是,如果我将输出输出打印到IDE或系统控制台,则可以正常工作。

我尝试使用来自readLine()的BufferedReader方法,然后应用regex,但是因为不是所有从终端接收到的输入都被\n终止,所以它阻塞在最后一行。

代码语言:javascript
复制
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();

有没有一种有效的方法从inputStream过滤这些转义码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-17 10:03:05

我收到的对我的问题(安全忽略未知ANSI,ESC/P,ESC/POS序列,知道长度)的回答也应该回答你的问题。如果您阅读标准(ECMA-48 1991.pdf),您将看到序列总是从转义字符开始,并且始终以一个最终字节结束,该字节的值来自定义的范围。有了这些信息,就足以检测每个序列的开始和结束。(例如regex)(在转义序列中也不允许换行符(和其他C0代码),因此永远不会有转义序列不完全位于一行内)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60480487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档