【问题标题】:Is there a built-in function to read from set reader?是否有从 set reader 读取的内置函数?
【发布时间】:2017-07-16 01:57:36
【问题描述】:

Nashorn 允许我们通过 print() 函数写入引擎使用的 writer。有没有办法使用内置函数从阅读器中读取信息?
示例:

Socket input=new Socket("stackoverflow.com", 1234);  
Socket output=new Socket("stackoverflow.com", 4321);  
engine.getContext().setWriter(new InputStreamReader(input.getInputStream())); //Changing to Socket input's reader from default one, which should be System.in.  
engine.getContext().setWriter(new OutputStreamWriter(s.getOutputStream())); //Changing from System.out to Socket output's output stream.

在这种情况下,如果我使用 print("hello"),Socket 输出将收到消息。但是如何读取 Socket 输入发送的内容?

【问题讨论】:

  • 我可以从标签中猜到,但你应该指定engine 是什么。
  • @chrylis 完成。感谢提及。
  • 您可以从文件中读取输入,如下所示: Scanner scan = new Scanner(new File("...myfiles/input.in"); 这将从输入文件中读取。然后您可以处理输入流,逐行。

标签: javascript java nashorn


【解决方案1】:

当您在 ScriptContext 上使用 setReader 和 setWriter 时,您正在为 Javascript 上下文设置默认输入和输出流。因此,您在这里所做的是配置 Javascript 以读取和写入套接字流。

这些流如何提供给 Javascript 代码将取决于您使用的 JS 环境/库。但是,使用 Node.js,您可以将它们视为 process.stdinprocess.stdout

FWIW,标准 ECMAScript 库不支持访问标准输入/标准输出。

【讨论】:

  • 我在 Java 应用程序中使用 Nashorn 脚本引擎。我总是可以使用 Java 对象来获取输入,但是如果没有办法使用它,那么拥有或能够设置阅读器的目的是什么?我在这里错过了什么?
  • 是的,你可以那样做。但是,您不需要进行setReadersetWriter 调用。另外,我从来没有说过这不是使用setReader设置的阅读器的方法。我说的是没有标准方法可以做到这一点。关键是 Java“脚本引擎”API 提供的功能领先于当前 ECMAScript 规范要求或支持的功能。
猜你喜欢
  • 2011-02-11
  • 1970-01-01
  • 2011-10-31
  • 2016-04-14
  • 2020-09-21
  • 2021-01-02
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多