假设我想在文件中搜索一些文本。我想知道我们什么时候应该使用像 grep 这样的系统实用程序/程序,什么时候应该使用 Java API,比如读取一行,然后搜索该行中的文本或使用 java Scanner 类。
我想了解这两种方法之间的权衡。我的意思是,假设如果我们使用 grep,那么 JVM 和 grep 进程之间会有通信开销吗?为 grep 创建新的操作系统进程是否会产生开销?
grep 的性能是否优于普通的 java 文件搜索?
请帮忙...
假设我想在文件中搜索一些文本。我想知道我们什么时候应该使用像 grep 这样的系统实用程序/程序,什么时候应该使用 Java API,比如读取一行,然后搜索该行中的文本或使用 java Scanner 类。
我想了解这两种方法之间的权衡。我的意思是,假设如果我们使用 grep,那么 JVM 和 grep 进程之间会有通信开销吗?为 grep 创建新的操作系统进程是否会产生开销?
grep 的性能是否优于普通的 java 文件搜索?
请帮忙...
Yes, there will be an overhead. Starting an external process and communicating with it is costly. And moreover, many systems don't have a grep command. If you want to make your Java code portable, don't rely on OS-specific commands.
Another problem is that OS commands will be able to search (for example) in files, but not in your in-memory data structures.
您基本上是在牺牲系统独立性来换取工具的感知收益,在某些情况下这是无法避免的。
并非每个系统都会在您认为应该安装的位置或您需要的版本中安装您想要的工具。
即使您可以将这些工具与您的应用程序一起部署,您也需要为每个目标平台提供一个实现。
当然,说“它永远不会在 X 上运行”很容易,但永远不会很快出现;)
还有执行和管理外部应用程序的 IO 的额外开销,虽然不难,但它比编写良好的 Java API 复杂得多。
正如我所说,有时,您根本别无选择(我有一些我在 Windows 和 Mac 上使用的媒体检查工具,我不打算尝试在 Java 中实现,不是因为它不能,而是因为它既复杂又耗时,而且有人已经完成了(使用本机程序))。
您需要在选择外部命令权重的好处与使用它的问题之间取得平衡。您还应该调查是否已经开始开发可能解决手头问题的 API。
恕我直言