在 Java 中,Field(字段)本身不是直接序列化的对象,通常我们说“字段怎么序列化”是指对象中的字段如何参与序列化,或者在反射/元编程场景中对 Field 对象进行处理。下面分几种常见情况说明。
Serializable)import java.io.*;
public class User implements Serializable {
private String name;
private int age;
// 构造、getter、setter
}
序列化:
User user = new User("Tom", 18);
ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("user.dat"));
oos.writeObject(user);
oos.close();
反序列化:
ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("user.dat"));
User user = (User) ois.readObject();
✅ 默认规则
statictransient❌ 不想序列化:
private transient String password;
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
控制字段序列化:
@JsonProperty("user_name")
private String name;
@JsonIgnore
private String password;
⚠️ java.lang.reflect.Field 不能序列化
Field f = User.class.getDeclaredField("name");
// 不能 writeObject(f)
class FieldInfo implements Serializable {
String className;
String fieldName;
}
或序列化字段值:
Object value = field.get(obj);
private void writeObject(ObjectOutputStream oos) throws IOException {
oos.writeUTF(name);
oos.writeInt(age);
}
private void readObject(ObjectInputStream ois) throws IOException {
name = ois.readUTF();
age = ois.readInt();
}
Externalizablepublic class User implements Externalizable {
public void writeExternal(ObjectOutput out) {}
public void readExternal(ObjectInput in) {}
}
| 场景 | 做法 |
|---|---|
| 对象字段序列化 | Serializable / JSON |
| 不序列化字段 | transient / @JsonIgnore |
| Field 对象 | ❌ 不可序列化,序列化字段名或值 |
| 自定义规则 | writeObject/readObject |
如果你指的是 某个具体框架(Jackson / MyBatis / Spring) 或 反射中如何保存 Field,可以告诉我场景,我可以给更具体的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。