【问题标题】:Hazelcast .net client deserilization issueHazelcast .net 客户端反序列化问题
【发布时间】:2017-04-28 08:37:12
【问题描述】:

我尝试在 Hazelcast 使用自定义序列化。在文档中,有一个 Java 示例。我将它添加到我的代码中。另一方面,我有一个 .net 客户端,所以我需要对其进行反序列化,但我无法编写读写方法。我的示例 .net 客户端代码在这里,我该如何使用它?

public class TestModelSerializer : IStreamSerializer<TestModel> {

    public void Destroy() {
        throw new NotImplementedException();
    }

    public int GetTypeId()
    {
        return 158;
    }

    public TestModel Read(IObjectDataInput input) {
        ?????
         //Here I cannot solved....
    }

    public void Write(IObjectDataOutput output,TestModel obj) {
        ?????
         //Here I cannot solved....
    }
}

Java 端代码是:

public static class TestModelXmlSerializer implements StreamSerializer<TestModel> {


    public int getTypeId() {
        return 158;
    }


    public void write(ObjectDataOutput out, TestModel object ) throws IOException {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        XMLEncoder encoder = new XMLEncoder( bos );
        encoder.writeObject( object );
        encoder.close();
        out.write( bos.toByteArray() );
    }


    public TestModel read( ObjectDataInput in ) throws IOException {
        InputStream inputStream = (InputStream) in;
        XMLDecoder decoder = new XMLDecoder( inputStream );
        return (TestModel) decoder.readObject();
    }


    public void destroy() {
    }
}

【问题讨论】:

  • 序列化的二进制数据应在 .Net 端反序列化,但您使用 java XML 编码器。生成的 xml 很难在 .Net 上处理。您应该更喜欢可以在 .Net 上处理的东西。
  • 好的,但是我该怎么做呢? Streams 会抛出异常,那么我编写的那些方法是什么?例如这个抛出异常。 public TestModel Read(IObjectDataInput input) { StreamReader inputStream = (StreamReader)input; XmlSerializer decoder = new XmlSerializer(typeof(TestModel)); return (TestModel)decoder.Deserialize(inputStream); }

标签: java c# serialization hazelcast


【解决方案1】:

Hazelcast 自定义序列化程序应使用兼容的数据格式,以便在 .Net 等各种平台上使用。

Java XmlEncoder/XmlDecoder 与 .Net XmlSerializer xml 格式不兼容,因此不适合此任务。如果您忽略性能,您可以使用 json 代替。例如,您可以在 java 上使用 GSON,在 .Net 上使用 json.net,它们共享相同的数据格式。

最好的方法是直接使用自定义序列化 API 还是委托您选择的高性能序列化库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多