Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;用于图像处理应用的Java通信_Java_C++_Sockets_Java Native Interface_Pipe - Fatal编程技术网

C++;用于图像处理应用的Java通信

C++;用于图像处理应用的Java通信,java,c++,sockets,java-native-interface,pipe,Java,C++,Sockets,Java Native Interface,Pipe,我必须建立一个图像处理软件。我用java显示图像和C++的应用程序的功能。很明显,图像将从C++发送到java,反之亦然。 我很困惑,选择哪种方法来通信C++和java。我研究并做了大量研究,最终发现了3种方法: JNI(java本机接口) 管道 插座。 选择哪种方法更好??我必须处理高达10MB的高清图像。请帮帮我,伙计们 如果C++应用程序可以安装和访问为命令行应用程序(例如:FFMPEG、MLT等),请遵循这些…< /P> 访问爪哇运行时执行的C++应用程序:代码>运行时。 与其他选项相比

我必须建立一个图像处理软件。我用java显示图像和C++的应用程序的功能。很明显,图像将从C++发送到java,反之亦然。 我很困惑,选择哪种方法来通信C++和java。我研究并做了大量研究,最终发现了3种方法:

  • JNI(java本机接口)

  • 管道

  • 插座。 选择哪种方法更好??我必须处理高达10MB的高清图像。请帮帮我,伙计们

    如果C++应用程序可以安装和访问为命令行应用程序(例如:FFMPEG、MLT等),请遵循这些…< /P> 访问爪哇运行时执行的C++应用程序:代码>运行时。 与其他选项相比,这将为您节省大量精力

  • 队列实现,以简化集群处理环境中的执行(当流量较高时)
  • 运行时进程执行的错误处理/日志记录

  • 参考资料:

    我也在处理同一问题。作为一种专业的方式,使用JNI调用java C++ DLL是我上次测试的最佳方法。JNA是另一种方式,但它速度较慢,对于某些功能(如双边对象映射和传递引用问题)机会较少。10 MB对它来说也是一个小数目,我用2 GB的图像进行了尝试,JNI成功地实现了这个大文件,没有任何问题(不要担心10 MB的文件,JNI提供了更多)。您可以为函数编写C++ DLL,可以实现java接口,用JNI调用它们。为此提出了一个新的替代方案,称为巴拿马项目。我认为JNI是到巴拿马完成日期为止最好的方式,我们将看到巴拿马将是最好的,或者JNI将保持目前的位置。

    出于性能原因,JNI是绝对必须的。但是,使用起来很不方便,所以这就是为什么我在JNI之上创建了工具,以便于在C++和中使用JNI。我最初开发它们是为了我自己的Java图像处理目的,因此它们应该非常适合您自己的目的。请查看,我用它们构建的应用程序。它的实时性非常好。

    但是每次调用新进程都会降低性能,因为命令行执行将直接引用资源(映像),在某种程度上可以避免磁盘i/o限制。如果您担心在一台服务器上运行多个并行进程,请执行步骤#2。但是dll不能与linux一起工作。我必须在LINUXIT上做个没用的东西,你可以使用。所以在Linux中的库而不是Windows中的DLL。我应该读C++中的数据类型的图像??因此,我可以在JavaAU中显示它,可以使用无符号字符指针来将它指向C++作为原始字节数组(搜索JNI GETPREVIVAREAR RayS临界)。对于Java端,可以使用字节数组进行显示。