短消耗输出:什么是从的Java调用一个过程,其输出经由JNI调用的C++功能消耗的最佳方式。运行过程从Java,C++中
长:我正在试验日志阅读器应用程序Android。为此,我必须运行logcat
命令并解析其输出。我试图从Java,但执行的内存分配的数量,这样不仅使过程非常慢,但它也混杂在相同的日志与大量的GC相关的条目。
因此,我已经在C++中实现了所有与解析相关的操作。然而,我不能使用惯用的fork/exec
成语来调用logcat
从C++方面,因为它不真的支持NDK。相反,我需要从Java开始该过程,并以某种方式使其输出可以被C++代码访问。理想情况下,我会为此使用管道,但ProcessBuilder
的redirectOutput
方法不适用于Android。
我已经提出了迄今最好的解决方法是启动过程(使用logcat > tempfile
)其输出重定向到一个临时文件中,并且具有从该文件中读出的C++代码。但是,这远非理想。有没有更好的方式让本地代码访问从Java开始的进程的输出?
这些都是好点。我并不知道4.1中引入的限制。我的理解是,从NDK开始的过程中的问题是Dalvik不知道它们。 – 2012-08-03 19:15:21