实现序列化必须实现Serializable接口,可以在类中实现writeObject和readObject控制序列化过程,具体可以参考ArrayList的实现.
transient标识可以在序列化时忽略该字段
public class User implements Serializable{
private static final long serialVersionUID = 1L;
private transient String name;
private transient String password;
private transient Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("User [name=").append(name).append(", password=")
.append(password).append(", age=").append(age).append("]");
return builder.toString();
}
private void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException{
s.writeUTF(name);
s.writeUTF(password);
s.writeInt(age);
}
private void readObject(java.io.ObjectInputStream s)
throws java.io.IOException, ClassNotFoundException {
name = s.readUTF();
password = s.readUTF();
age = s.readInt();
}
}
User user = new User();
user.setName("张三");
user.setPassword("12345678");
user.setAge(30);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(user);
oos.flush();
oos.close();
byte[] value = bos.toByteArray();
ByteArrayInputStream bis = new ByteArrayInputStream(value);
ObjectInputStream ois = new ObjectInputStream(bis);
user = (User) ois.readObject();
ois.close();
System.out.println(user);
结果为
User [name=张三, password=12345678, age=30]
其实在类里加writeObject和readObject方法和实现Externalizable没有什么区别
分享到:
相关推荐
在Java中,实现`Serializable`接口的类可以被序列化。然而,有时我们可能希望在序列化过程中忽略某些敏感或临时的成员变量。这就是`transient`关键字的用途。 `transient`关键字用于标记某个成员变量,使其在序列化...
### Java中的transient关键字详解 在Java编程语言中,`transient`关键字是一个非常重要的概念,主要用于对象序列...同时,理解`transient`与`volatile`之间的区别也是处理复杂Java应用中的多线程和序列化问题的关键。
在Java编程语言中,`transient`是一个非常重要的关键字,它与对象持久化和序列化密切相关。当一个字段被声明为`transient`时,它表明该字段的值不会随着对象的序列化而保存。这通常用于那些不希望或者不需要在序列化...
在Java编程语言中,`Serializable`接口是一个非常重要的概念,它是实现对象持久化的关键。本文将深入探讨`Serializable`接口的细节,以及与其相关的高级知识。 `Serializable`接口是Java中的一个标记接口,没有包含...
例如,`MySerializable.java`和`Product.java`两个文件可能分别代表实现了`Serializable`接口的类。`MySerializable`可能是自定义的一个示例类,而`Product`可能是表示产品的类,它们都包含了可序列化的属性。 在`...
另外,对于包含敏感信息的类,可以通过使用`transient`关键字标记那些不想序列化的字段,因为`transient`字段不会被序列化。 此外,`Serializable`接口没有版本控制机制,当序列化的类结构发生变化(比如增加、删除...
#### 五、`Serializable` 与 `Externalizable` 的区别 除了 `Serializable` 接口之外,Java 还提供了 `Externalizable` 接口来控制序列化过程。`Externalizable` 继承自 `Serializable`,并定义了两个方法: 1. `...
- ** transient 关键字**:如果某个字段不需要序列化,可以使用`transient`关键字修饰。序列化时,这些字段会被忽略。 - **readObject() 和 writeObject()** 方法:可以覆盖这两个方法来自定义序列化和反序列化的...
### Java关键字Transient与串行化 #### Transient关键字解析 在Java编程语言中,`transient`是一个非常重要的关键字,主要用于对象的串行化过程中。它用于标记对象中的某些字段,使得这些字段不会被串行化到持久...
在Java编程语言中,`transient`是一个非常重要的关键字,它与对象的序列化息息相关。序列化是将一个对象的状态转换为字节流的过程,这样就可以存储或在网络中传输。当我们标记一个字段为`transient`时,意味着该字段...
在Java编程语言中,`transient`关键字是一个非常重要的概念,它与对象的序列化过程紧密相关。序列化是将一个对象的状态转换为字节流,以便存储或在网络中传输。当一个类实现了`Serializable`接口,该类的对象就可以...
在给定的文件列表中,除了与`transient`关键字相关的`Java之transient关键字.md`文件,其他如`javaweb\Tomcat.md`、`javaweb\Cookie、Session、localStorage、sessionStorage区别和用法.md`等文件可能涉及Web开发中...
然而,`Serializable`效率较低,因为它会序列化对象的所有属性,包括transient和static修饰的,这可能导致不必要的性能开销。此外,序列化产生的字节流包含了大量的元数据,增加了数据量。 2. **Parcelable接口** ...
2. 网络传输:在客户端与服务器之间传递对象时,可以通过序列化将对象转换为可传输的数据格式。 3. 活动状态保存:Android中,Activity的实例在屏幕旋转等配置改变时会被销毁,通过序列化可以保存Activity的状态。 4...
在序列化过程中,`volatile`字段会被正确地处理,与非`volatile`字段没有区别。 为了实现序列化,你需要在类定义前添加`implements Serializable`。例如: ```java public class MyClass implements Serializable ...
在Java编程语言中,序列化(Serializable)是一个关键特性,它允许对象的状态被持久化到磁盘上,或者在网络中进行传输。这个过程涉及到将一个对象转换为字节流,以便存储或传输,然后可以将这个字节流恢复为原始的...
`transient`字段不会被序列化,因为它们通常是临时性的或与特定的会话有关。而`static`字段属于类而非实例,因此通常也不需要序列化。 序列化的过程分为两个步骤:`writeObject()`和`readObject()`。`writeObject()...
开发者可以通过`transient`关键字标记不想序列化的字段。此外,虽然`Serializable`提供了更多的灵活性,比如可以通过覆盖`writeObject`和`readObject`来自定义序列化过程,但这也增加了代码的复杂度和维护成本。 总...
对于那些不希望被序列化的类或字段,可以使用`transient`或`volatile`关键字标记,它们会被忽略在序列化过程中。 序列化在安全方面也存在潜在风险,因为序列化允许任意代码执行。攻击者可能通过篡改序列化数据来...