У меня есть система, в которой сериализованный файл создается с помощью программы C# и затем десериализован в другой программе на C#. Мне интересно, можно ли выполнить двоичную десериализацию файла C# в Java?Deserializing C# Binary в Java
Благодаря
У меня есть система, в которой сериализованный файл создается с помощью программы C# и затем десериализован в другой программе на C#. Мне интересно, можно ли выполнить двоичную десериализацию файла C# в Java?Deserializing C# Binary в Java
Благодаря
Вы можете попробовать использовать некоторые serializator, который имеет реализации для обеих платформ и выводит данные в кроссплатформенных формате, как Protobuf.
Если вам нужна полная RPC-сеть между Java и C# -приложением, вы можете перейти на Apache Thrift.
Я предполагаю, что вы говорите об объекте, сериализованном с помощью BinaryFormatter
. Тогда ответ будет квалифицированным «да», поскольку Java реализует машину Тьюринга. Однако это будет непросто.
В этом случае данные будут в формате, наиболее подходящем для использования средой выполнения .NET, и будут содержать информацию о типах и сборках .NET. Вам нужно будет реализовать свой собственный читатель для этого формата, а затем каким-то образом сопоставить между .NET и Java-типами. (Проект Mono реализует BinaryFormatter
, совместимый с .NET, поэтому вы можете использовать their reader implementation в качестве ссылки.)
В качестве альтернативы рассмотрите возможность использования другого формата для сериализации данных, такого как JSON. Это обеспечит вам мгновенную переносимость широкого спектра языков, а также возможность для простой проверки данных людьми.
JSON технически не бинарная сериализация. Возможно, это жизнеспособная альтернатива OP. Просто указывая на это. –
@WilliamMorrison Я никогда не утверждал, что это была двоичная сериализация. OP не указывает, что бинарная сериализация является требованием, они просто спрашивают, возможно ли читать Java-специфический двоично-сериализованный граф объектов C#. – cdhowie
Не то, о чем попросил ОП, вот и все, что я говорю. –
Десализируя объект в Java, который был сериализован с помощью встроенной двоичной сериализации C#, вы должны были реализовать логику десериализации логики C# в java. Это довольно сложный процесс, поэтому давайте сравним некоторые варианты:
Использование библиотеки третьей стороной за сериализации, которая работает для C# и Java.
Написать рутину для сериализации каждого объекта. Один в C#, один в Java. Это будет утомительно и трудно поддерживать.
Внедрить логику сериализации C# на Java или наоборот. Это будет сложно, отнимает много времени, и вы, скорее всего, не получите его в первый раз.
Рекомендовать вариант 1, использовать стороннюю библиотеку. Вот две сторонние библиотеки, которые я использовал и очень рекомендую.
Вы можете использовать любой кросс-платформенной двоичный формат. Ваши варианты включают в себя, среди прочего:
JSON и XML (herrrrp) также варианты, хотя и текстовых единиц.
Другим вариантом будет кодирование данных base64 и декодирование его с другой стороны; хотя вы можете получить огромную полезную нагрузку, потому что она двоичная (вероятно, не очень хорошая идея).
gzip - формат сжатия. Я не вижу, как он вписывается в этот список. Вы имели в виду что-то еще? – leppie
@leppie, если это та же физическая система, GZip в одной программе и разархивировать ее в другую. Разве это не то, что вы хотите? Даже если это сеть, вы можете отправить ее через провод и разархивировать ее с другой стороны. – ashes999
Я не думаю, что java может использовать вывод BinaryFormatter, но вы можете использовать Xml, Json, Protobuf. – I4V
@ I4V: Конечно, Java * может * использовать вывод бинарного форматирования .Net. Это просто, что нет известной реализации ... :) –
@BorisB. Спасибо, я этого не знал :) – I4V