Java文件单编写器、单读取器
一,;我正在寻找Java程序之间的一种非常基本的IPC机制。我不喜欢使用套接字,因为我的“代理”正在生成新的JVM,在这样的环境中设置套接字有点复杂 我在考虑每个生成的JVM有2个文件:in和out。在in上,代理向工作进程发送命令。在输出时,工作者将响应发送回代理 最大的问题是,到目前为止,我还没有设法让通讯正常运行。仅仅创建ObjectOutputStream/ObjectInputStream并不是现成的,因为readObject方法没有阻塞。当没有内容而不是阻塞时,它将抛出一个EOFEException。幸运的是,这很容易修复,只需添加一个延迟,稍后再试 所以我启动了我的POC并开始运行,但最终我遇到了流腐败问题。所以很明显,即使在仅附加模式下,您仍然可能遇到损坏问题。因此,我开始研究文件锁,但现在运行的是一个主java.lang.Error:java.io.IOException:Bad file descriptorJava文件单编写器、单读取器,java,io,Java,Io,一,;我正在寻找Java程序之间的一种非常基本的IPC机制。我不喜欢使用套接字,因为我的“代理”正在生成新的JVM,在这样的环境中设置套接字有点复杂 我在考虑每个生成的JVM有2个文件:in和out。在in上,代理向工作进程发送命令。在输出时,工作者将响应发送回代理 最大的问题是,到目前为止,我还没有设法让通讯正常运行。仅仅创建ObjectOutputStream/ObjectInputStream并不是现成的,因为readObject方法没有阻塞。当没有内容而不是阻塞时,它将抛出一个EOFEE
到目前为止,“让我们做简单的文件事情”是一个相当大的任务,我不确定我是否在正确的道路上。我不想引入像JMS这样的重量级解决方案,也不想引入像套接字这样的轻量级解决方案。有人知道解决这个问题的非常简单的方法吗?我仍然倾向于基于文件的方法。代理JVM是跨工作JVM的,还是两个JVM是独立启动的?我想知道这是否是一个XY问题。您能详细说明一下为什么在这样的环境中设置套接字要复杂一些吗?以您试图使用文件的方式使用文件似乎很复杂。代理JVM产生了工作者JVM。我没有从一开始就选择套接字的原因是,我正在设置的系统旨在通过引发各种问题来强调/破坏工作者进程。例如OOME、网络等。在这种情况下,基于文件的方法比基于套接字的方法问题小。使用System.In/out worker JVM如何?如果代理JVM通过runtime.exec调用生成工作JVM,则代理JVM可以从工作JVM获取对System.in/out的引用。您可以通过这些流读取/写入命令。