gpt4 book ai didi

Java序列化重命名字段

转载 作者:行者123 更新时间:2023-11-30 08:06:30 26 4
gpt4 key购买 nike

有什么方法可以序列化一些具有不同名称的字段吗?例如我有一个类如下:

public class MyClass implements Serializeable {
private String name;
private String lastName;
}

我希望将其序列化,但也希望将字段 name 重命名为 a1 并将字段 lastName 重命名为 a2.

实际上我的应用程序提供了粗麻布网络服务。据我所知,hessian 使用 java 序列化来序列化对象并将它们流式传输到客户端。

最佳答案

我强烈建议使用某种数据格式,例如XMLJSON,这将使您的任务变得更加容易,因为您可以编写自定义的“(de-)序列化器”来为您执行转换。

如果您需要使用 Java 对象序列化,则需要两个类具有相同的类名(包名和类名),并且附加一个 serialVersionUID,其值在类序列化命令读回类。

package testbench;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;


public class MyClass implements Serializable {

private static final long serialVersionUID = 1L;

private String name;
private String lastName;

public MyClass(final String name, final String lastName) {
this.name = name;
this.lastName = lastName;
}

private void writeObject(final ObjectOutputStream out) throws IOException {
out.writeUTF(name);
out.writeUTF(lastName);
}

private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException {
name = in.readUTF();
lastName = in.readUTF();
}

@Override
public String toString() {
return name + " " + lastName;
}

}

客户端可以将不同的类与其他方法和字段一起使用:

package testbench;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;


public class MyClass implements Serializable {

private static final long serialVersionUID = 1L;

private String a1;
private String a2;

public MyClass(final String a1, final String a2) {
this.a1 = a1;
this.a2 = a2;
}

private void writeObject(final ObjectOutputStream out) throws IOException {
out.writeUTF(a1);
out.writeUTF(a2);
}

private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException {
a1 = in.readUTF();
a2 = in.readUTF();
}

@Override
public String toString() {
return a1 + " " + a2;
}

}

关于Java序列化重命名字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31020902/

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