gpt4 book ai didi

java - 如何正确序列化/反序列化Java Object[]?

转载 作者:行者123 更新时间:2023-12-01 19:46:31 24 4
gpt4 key购买 nike

我正在编写一个 rpc 框架,但面临序列化问题。

你知道要在客户端和服务器之间转换 Request,我应该有一个这样的 Request 类:

class Request {
// target service class
private Class<?> targetService;
// target service method
private String targetMethod;
// target method param types
private Class<?>[] targetParamTypes;
// the params
private Object[] targetParams;
// getters & setters & contructors
}

但是:

  1. 对于targetParams字段,如果我使用Gson作为序列化工具,它将得到com.google.gson.internal.LinkedTreeMap无法转换为the.packages.to对于一般问题,如果我将 POJO 放入 targetParams 中,则会出现 .MyClass 错误。

  2. 对于 int 类,Gson 总是将其解析为 Double,因此我无法使用 targetParamTypes[i].cast(targetParams[i] ) 强制将其转换为 Integer(Double 无法转换为 Integer),这很糟糕...

那么有人有办法解决这个问题吗?如何使序列化/反序列化步骤快速准确?或者有什么工具推荐吗?

我已经尝试过:

  • Gson,先把问题搞定
  • Kyro,编解码器系统很糟糕,我不知道如何序列化/反序列化 HashMap...
  • protostuff,嗯,它不支持 Java 9+,我的环境是 Java 11,糟糕!

有什么建议吗?

最佳答案

你可以看看Jackson 。 Jackson 的 ObjectMapper 应该能够将您的 Request 对象转换为 String,反之亦然。

编辑:添加示例

请求实体:

class Request {

private Class<?> targetService;
private String targetMethod;
private Class<?>[] targetParamTypes;
private Object[] targetParams;

// needed by Jackson
private Request(){

}

public Request(Class<?> targetService,
String targetMethod,
Class<?>[] targetParamTypes,
Object[] targetParams) {
this.targetService = targetService;
this.targetMethod = targetMethod;
this.targetParamTypes = targetParamTypes;
this.targetParams = targetParams;
}

// getters and setters, needed by Jackson

}

序列化/反序列化示例:

public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();

Request req = new Request(String.class, "test", new Class[] {String.class}, new Object[] {"Test"});
String serialized = mapper.writeValueAsString(req);
System.out.println(serialized);

req = mapper.readValue(serialized, Request.class);
System.out.println(req);
}

关于java - 如何正确序列化/反序列化Java Object[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53063256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com