Совместимость потоков Java и .NET через IKVM - PullRequest
4 голосов
/ 05 июля 2011

В моем текущем проекте я использую IKVM для кросс-компиляции нескольких библиотек Java, которые имеют дело с различными аспектами XML.Эти библиотеки затем интегрируются с несколькими библиотеками .NET и моим основным кодом.Все работает нормально, но я подозреваю, что есть несколько недостатков, особенно в области потокового доступа к данным.

Многие из библиотек Java могут принимать потоковые классы SAX или другие потоковые объекты, такие как OutputStream и т. Д.В некоторых случаях я могу обернуть соответствующий класс Java в соответствующий класс .NET для устранения разрыва и обеспечения плавной потоковой передачи между двумя языками.Например, создание класса, производного от .NET MemoryStream и Java OutputStream.Однако в большинстве случаев интерфейс сложен, и мне остается передавать целые строки, хотя у меня есть потоки, доступные на стороне .NET, а сторона Java принимает (разные) классы потоков (и наоборот).

В общем, мой вопрос: сталкивались ли кто-либо с подобными проблемами при передаче данных в / из скомпилированных библиотек IKVM с использованием потоков и как они были решены или смягчены?Существуют ли сторонние решения, чтобы помочь преодолеть этот разрыв?Например, код, который предоставляет оболочки Java SAX для .NET XmlReader и / или XmlWriter, был бы очень полезен.

1 Ответ

4 голосов
/ 06 июля 2011

Я сделал несколько классов для такого рода вещей в Saxon .Это открытый исходный код, поэтому вы можете использовать все, что считаете полезным.Хотя я не гарантирую, что они являются полными и правильными, если вы используете их не так, как их использует Саксон.

DotNetInputStream отображает поток .NET в Java InputStream.

DotNetOutputStream отображает поток .NET в Java OutputStream.

DotNetReader сопоставляет .NET TextReader с Java Reader.

DotNetWriter сопоставляет .NET TextWriter с Java Writer.

Для потоков XML Saxon имеет свои собственные внутренние интерфейсы push / pull (Receiver и PullProvider соответственно), и есть классы, которые отображают оба из них в / из соответствующих интерфейсов Java и .NET.

...