以下是来自 Lee Kamentsky 的博客文章,最初发布在 ImageJDev 网站上。
大家好,
只要这篇文章,我就可以继续我在第一篇文章中所做的事情。该代码可以通过our SVN repository获取。
我将 Java/Python 接口分为 3 部分:
- JNI 的低级包装 (cellprofiler.utilities.javabridge):这一层非常接近 JNI 环境上的方法调用与 JVM 实例和 Python 方法调用之间的 1 对 1 映射。它是用 Cython 编写的,让您可以在类似 Python 的语言中引用 C 结构。目前,我对 JNI方法的覆盖率大约 60%;您可以实例化类和对象、调用对象和类上的方法、获取静态字段值以及将对象和字节队列从 Java 转换为 Python。目前一切都在单线程环境中运行;我可能会在下个月内添加运行多线程所需的钩子。
- JNI 的实用程序例程 (cellprofiler.utilities.jutil):该模块具有调用类和对象上的方法并进行异常处理的功能,并且具有让程序员为 Java 对象构造 Python 包装器的实用程序一样。您可以将对象的方法绑定到 Python 类,然后像调用 Python 调用该对象。有 java.lang.Class、java.util.Dictionary 和 java.util.Enumeration 的包装器。
- Bio-Formats包装器(bioformats.formatreader):该模块具有一些Bio-Formats类的包装器。创建ImageReaders和FormatReaders(例如ChannelSeparator)非常容易。
我们可以在 PC 和 Mac 上进行构建,并且非常接近于 Linux 上的任何处理器构建一些。 CellProfiler 目前正在使用 Bio-Formats 读取所有图像。
作为一名程序员,您可以同时进行一项技术的稳定性及其可信度。人们很容易做出错误的选择,一开始基本可行,但结果却出现了很多问题,以至于无法支持。JNI下的JNI和Bio-Formats感觉很稳定。据我所知,两者都运行清晰、可预测,使用起来很简单,而且工作原理与描述的完全一样。我可以使用Java的引用自动包装Python中的Java对象的工具。不过,我所采用的方法对于我使用它的环境来说效果很好。因此我需要少量的类,现在手工制作每个包装器并测试它是否有效是有意义的;这只是少量的代码,运行简单且可预测。
我们已经留了一些时间,希望在 12 个月内尝试使用生物格式来写入文件;当我们取得进展时,我会让人们知道。
——李