可以制作通用的序列化方法吗?我可以在其中传递任何对象并根据它的类序列化它?像这样:
public void serializeObject(T Object) {
try (ObjectOutputStream clientOutputStream = new ObjectOutputStream(socketConnection.getOutputStream());) {
clientOutputStream.writeObject(Object);
System.out.println(user.getUsername());
//clientOutputStream.close();
} catch (Exception e) {
System.out.println(e);
}
}
答案 0 :(得分:1)
你可以使用反射来构建这样的东西。您检查要转储的对象;检索其所有字段;然后尝试序列化这些。当然,将变成硬,因为你必须检测"周期",以避免序列化A指向B指向C指向回到A例如。
你必须要理解所有微妙的问题,比如拥有内在的物体等等。说真的:这是很难。
然后:序列化不是这次挑战中的真正问题!
问题是从序列化数据重建泛型类的对象。
因此,真正的答案是:这是一项高级任务,您可以轻松浪费很多时间。含义:您宁愿退后一步,澄清您的要求。您应该利用自己的能量找到符合您需求的现有框架,而不是重新发明轮子。开始阅读here。
答案 1 :(得分:0)
尝试开箱即用的地图制作工具,例如杰克逊JSON映射器
import com.fasterxml.jackson.databind.ObjectMapper;
ObjectMapper mapper = new ObjectMapper();
String jsonInString = mapper.writeValueAsString(yourObject);
YourClass yourObject = mapper.readValue(jsonInString, YourClass.class);
答案 2 :(得分:0)
无法创建Generic Serializer。相反,您可以将对象转换为支持序列化的公共对象。
例如,您可以使用GSON
将对象转换为String并序列化字符串。在反序列化期间,将反序列化的字符串对象传递给gson以使对象恢复。
public <T> void serializeObject(T object) throws Exception{
Gson gson = new Gson();
String stringToSerialize = gson.toJson(object).toString();
try(ObjectOutputStream oStream = new ObjectOutputStream(new FileOutputStream("generic.ser"))){
oStream.writeObject(stringToSerialize);
}
}
public <T> T deSerializeObject(Class className) throws Exception{
Gson gson = new Gson();
try(ObjectInputStream iStream = new ObjectInputStream(new FileInputStream("generic.ser"))){
String object = (String)iStream.readObject();
return (T) gson.fromJson(object,className);
}
}
当然,这种解决方案会降低性能。这完全取决于我们的要求。