java - Java 中有处理命名管道的跨平台方法还是我应该编写自己的方法?

标签 java java-native-interface named-pipes

我正在编写一些 JNI 代码,其中运行在系统上各个进程的进程空间中的 DLL 需要与 java 进程进行对话。在权衡共享内存/套接字/rpc 等之后,我决定使用命名管道来执行此操作(出于各种原因)。我的问题是,是否有一种在 Java 中处理命名管道的好方法,或者我应该编写一个? p>

最佳答案

假设您在 Unix 上运行,难道您不能只使用 exec 创建管道,然后使用 File*Stream 进行读写吗?

@Test public void pipe() throws IOException, InterruptedException {
    Runtime.getRuntime().exec("mkfifo mypipe");

    final String[] read = new String[1];
    Thread t = new Thread() {
        @Override
        public void run() {
            try {
                BufferedReader r = new BufferedReader(new FileReader("mypipe"));
                read[0] = r.readLine();
            } catch (IOException e) {
            }
        }
    };
    t.start();

    FileWriter w = new FileWriter("mypipe");
    w.write("hello\n");
    w.flush();
    t.join();

    assertEquals("hello", read[0]);
}

关于java - Java 中有处理命名管道的跨平台方法还是我应该编写自己的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1666815/

相关文章:

可以仅使用 C 来利用 Windows API 吗?

Windows 上的 MySQL 命名管道——更快的最佳实践,还是坏主意?

java - 如何修复 Eclipse 项目的结构?

java - 我们应该在一个类中总是有一个零参数的构造函数吗?

java - 如何修复将使用 JNI 传输到 Java 的二维数组代码?

java - 在 Websphere Liberty 中加载 native 库的做法是什么?

windows - 低完整性到中/高完整性管道安全描述符

c++ - 在两个终端之间传递缓冲区(命名管道)

java HttpClient-4.1.2 jar

java - 正则表达式电子邮件验证长度