在我当前的项目中,我使用IKVM交叉编译处理XML各个方面的多个Java库。这些库然后与几个.NET库和我的主线代码集成在一起。一切正常,但是我怀疑效率低下,尤其是在基于流的数据访问方面。

许多Java库都可以接受流SAX类或其他流对象(例如OutputStream等)。在某些情况下,我可以将适当的Java类包装在对应的.NET子类中,以弥合差距并提供两种语言之间的无缝流。例如,创建一个从.NET MemoryStream和Java OutputStream派生的类。但是,在大多数情况下,接口是具有挑战性的,即使在.NET端有可用的流并且Java端接受(不同的)流类(反之亦然),我仍然需要传递整个字符串。

总的来说,我的问题是,是否有人遇到过使用流向IKVM编译的库传递数据或从IKVM编译的库传递数据的类似问题,以及如何解决或缓解它们?是否存在任何第三方解决方案来帮助弥合这一差距?例如,为.NET XmlReader和/或XmlWriter提供Java SAX包装器的代码将非常有用。

最佳答案

我在Saxon中为这种事情做了一些桥接类。它是开源的,因此您可以重用任何有用的内容。尽管我不能保证以非Saxon使用它们的方式来使用它们,否则它们是完整无误的。

DotNetInputStream将.NET流映射到Java InputStream。

DotNetOutputStream将.NET流映射到Java OutputStream。

DotNetReader将.NET TextReader映射到Java Reader。

DotNetWriter将.NET TextWriter映射到Java Writer。

对于XML流,Saxon有自己的内部推/拉接口(分别为Receiver和PullProvider),并且有一些类将这两者映射到对应的Java和.NET接口。

10-04 10:46