2017-02-25 19 views
0

Nashorn允许我们通过print()函数向引擎使用的写入者写信。有没有一种方法可以使用内置函数从阅读器读取数据?
实施例:是否有一个内置函数来读取设置阅读器?

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. 

在这种情况下,如果使用打印(“你好”),插座输出将接收该消息。但我怎样才能读取Socket输入发送的内容?

+0

我可以从标签中猜出,但是你应该指定'engine'是什么。 – chrylis

+0

@chrylis完成。感谢提及。 – Burak

+0

您可以像下面一样从文件读取输入:扫描仪扫描=新扫描仪(新文件(“... myfiles/input.in”);这将从输入文件中读取,然后您可以逐行处理输入流 – Juniar

回答

0

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

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

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

+0

我在Java应用程序中使用了Nashorn脚本引擎,我总是可以使用Java对象来获得输入,但是如果没有办法使用它,那么拥有或能够设置阅读器的目的是什么?我错过了吗? – Burak

+0

是的,你可以这样做,但是你不需要执行'setReader'和'setWriter'调用。另外,我从来没有说过用setReader '我说的是没有一种标准的方法可以做到这一点,关键在于Java的“脚本引擎”API提供了当前ECMAScript规范要求或支持的功能。 –