在java中实时将IO Process的值传递给另一个类

Posted

技术标签:

【中文标题】在java中实时将IO Process的值传递给另一个类【英文标题】:passing values of IO Process to another class in real time in java 【发布时间】:2012-02-09 18:29:18 【问题描述】:

我有一个基本问题,我需要对其使用进行一些说明。 因此,如果我在 Java 中有一个类说IOReadWrite.java,我会在其中进行一些 IO 读/写。因此它可能有一个始终连接的循环,例如:

while ((line = stream.readLine()) != null)
     //incoming data
  

现在我有另一个类,称之为FrontEnd.java,我应该在其中显示来自IOReadWrite.java 类的实时结果。通常发生的情况是,如果我调用 IO 类的方法,除非整个 IO 操作完成并且我必须等待,否则我无法获得结果。

但是,我想要的是能够实时获得这些结果,这样只要输入 Stream 上有内容,我就可以在我的 FrontEnd 类中得到它来做任何我想做的事情。

我想出的一个想法是在 IOReadWrite.java 中使用静态字符串变量并编写一个方法,该方法只返回该变量的值,然后我可以从主类轮询该函数。但我很确定这是一个非常糟糕的方法。

您能否建议实时获取此类信息的正确方法?

【问题讨论】:

IOReadWrite 的操作确实在单独的线程中运行,对吧?如果没有,无论如何你都会阻止。如果是这样,您只需要在线程之间共享(和同步)一些数据结构(甚至只是一个字符串)。 @Viruzzo,谢谢,是的,它在另一个线程中,问题是这是一个通用方法,可以被导入这个库的任何其他类使用,所以在这种情况下,我不能调用外部函数这个类,我只需要为将要使用它的功能的用户提供一个前端。谢谢 【参考方案1】:

你可以这样做

FrontEnd frontEnd = 
while ((line = stream.readLine()) != null)
     //incoming data

     // notify immediately.
     frontEnd.displayLine(line);

displayLine 的作用取决于您对该类的实现。您能否详细说明该课程对这些信息所做的工作?

它可以做的是

private final BlockingQueue<String> linesQueue = ...

public void displayLine(String line) 
     linesQueue.add(line);


// somewhere else, in another thread.
String line = linesQueue.take(); // wait for a line.

String line = linesQueue.poll(); // get the next or null

【讨论】:

哦,这个后台记录器线程真的是我想要的,谢谢它会解决我的问题! @Johnydep 要么使用单例(如果你只有一个前端或读取线程),要么在启动前将前端作为参数传递给读取线程。

以上是关于在java中实时将IO Process的值传递给另一个类的主要内容,如果未能解决你的问题,请参考以下文章

如何在ios中自定义推送和弹出动画时将视图传递给另一个控制器? [关闭]

如何在 STL 中使用指向向量的指针,就像我们在将数组地址传递给另一个函数时将指针分配给数组一样?

如何使用html将一个页面的值传递给另一个页面

如何将嵌入式collectionView中选定单元格的值传递给另一个viewController?

将 RDD 的值作为变量传递给另一个 RDD - Spark #Pyspark [重复]

REACTJS 和 API 将 Api 的值传递给另一个页面