下面是代码,你懂的。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Date;
public class LoggingInfo implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = -6134850492552383232L;
private Date loggingDate = new Date();
private String uid;
private transient String pwd;
private transient String code;
LoggingInfo(String user, String password) {
uid = user;
pwd = password;
code = "验证码";
}
public String toString() {
String password = null;
if (pwd == null) {
password = "NOT SET";
} else {
password = pwd;
}
if (code == null) {
code = "实例中变量code修饰为transient,将它写入磁盘,并且再将它从磁盘中读出,仍然看到读回的对象打印code为 null。当从磁盘中读出某个类的实例时,实际上并不会执行这个类的构造函数,而是载入了一个该类对象的持久化状态,并将这个状态赋值给该类的另一个对象";
}
return "logon info: \n"
+ "user: " + uid + "\n"
+ "logging date : " + loggingDate.toString() + "\n"
+ "password: " + password + "\n"
+ "code: " + code + "\n";
}
public static void main(String[] args) {
LoggingInfo logInfoA = new LoggingInfo("MIKE", "MECHANICS");
System.out.println(logInfoA.toString());
try {
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("logInfo.out"));
o.writeObject(logInfoA);
o.close();
} catch (Exception e) {
// deal with exception
}
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream("logInfo.out"));
LoggingInfo logInfo = (LoggingInfo) in.readObject();
System.out.println(logInfo.toString());
} catch (Exception e) {
// deal with exception
}
}
}
Java的序列化机制只序列化对象的属性值,而不会去序列化什么所谓的方法。
Transient的数据将不会被实例化。
分享到:
相关推荐
在Java中,实现`Serializable`接口的类可以被序列化。然而,有时我们可能希望在序列化过程中忽略某些敏感或临时的成员变量。这就是`transient`关键字的用途。 `transient`关键字用于标记某个成员变量,使其在序列化...
### Java中的transient关键字详解 在Java编程语言中,`transient`关键字是一个非常重要的概念,主要用于对象序列化过程中对特定变量的控制。当一个类实现了`Serializable`接口时,其对象可以被序列化为一个持久化的...
在Java编程语言中,`transient`是一个非常重要的关键字,它与对象持久化和序列化密切相关。当一个字段被声明为`transient`时,它表明该字段的值不会随着对象的序列化而保存。这通常用于那些不希望或者不需要在序列化...
首先,`Serializable`接口是Java中用于实现序列化的标志接口。它没有定义任何方法,但当一个类实现了这个接口,Java的ObjectOutputStream就可以将该类的对象写入到流中。例如,`MySerializable.java`和`Product.java...
在Java编程语言中,`Serializable`接口是一个非常重要的概念,它是实现对象持久化的关键。本文将深入探讨`Serializable`接口的细节,以及与其相关的高级知识。 `Serializable`接口是Java中的一个标记接口,没有包含...
在Java中,如果一个类需要支持序列化,那么该类需要实现`java.io.Serializable`接口,虽然这个接口没有定义任何方法,但是它的存在作为一个标记,表明该类的对象可以被序列化。 序列化的优点主要有以下几点: 1. **...
在Android开发中,Serializable接口是实现对象序列化的重要方式,它是Java平台标准的一部分,但在Android环境中也有广泛的应用。本文将深入探讨Android中的Serializable序列化机制,包括其原理、使用场景以及注意...
在Java编程语言中,`transient`是一个非常重要的关键字,它与对象的序列化息息相关。序列化是将一个对象的状态转换为字节流的过程,这样就可以存储或在网络中传输。当我们标记一个字段为`transient`时,意味着该字段...
- **`transient` 关键字**:使用 `transient` 可以排除某些字段不被序列化。 - **版本兼容性**:序列化的类应该定义一个 `serialVersionUID` 来确保版本兼容性。 - **私有构造函数**:如果类有私有的构造函数,需要...
当你创建一个可序列化的类(通过实现`Serializable`接口)时,如果你不想某些字段在序列化过程中被保存或在反序列化后恢复,就可以使用`transient`修饰这些字段。 **什么是序列化?** 序列化是将对象的状态转换为...
在Java编程语言中,`transient`关键字是一个非常重要的概念,它与对象的序列化过程紧密相关。序列化是将一个对象的状态转换为字节流,以便存储或在网络中传输。当一个类实现了`Serializable`接口,该类的对象就可以...
在这个例子中,`LoggingInfo`类实现了`Serializable`接口,并且有一个被声明为`transient`的密码字段`pwd`。这意味着当对象被串行化时,`pwd`字段的值将不会被保存。 接下来,我们创建了一个`LoggingInfo`实例,并...
- ** transient 关键字**:如果某个字段不需要序列化,可以使用`transient`关键字修饰。序列化时,这些字段会被忽略。 - **readObject() 和 writeObject()** 方法:可以覆盖这两个方法来自定义序列化和反序列化的...
然而,`Serializable`效率较低,因为它会序列化对象的所有属性,包括transient和static修饰的,这可能导致不必要的性能开销。此外,序列化产生的字节流包含了大量的元数据,增加了数据量。 2. **Parcelable接口** ...
在Java编程语言中,`Serializable`接口是一个非常重要的概念,它是用来实现对象序列化和反序列化的机制。对象序列化是将对象的状态信息转换为可以存储或传输的形式的过程,而反序列化则是相反的过程,即将数据从序列...
如果某个类的父类没有实现`Serializable`接口,那么子类仍然可以序列化,但是父类的字段不会被序列化,除非父类中声明了`transient`或`volatile`的字段。 在序列化过程中,有时需要对特定类的字段进行特殊处理。...
在Java编程语言中,序列化(Serializable)是一个关键特性,它允许对象的状态被持久化到磁盘上,或者在网络中进行传输。这个过程涉及到将一个对象转换为字节流,以便存储或传输,然后可以将这个字节流恢复为原始的...
在Java编程语言中,`Serializable`接口是一个非常重要的概念,它涉及到对象的状态持久化和网络传输。序列化是将一个对象转换为字节流的过程,这样就可以将其保存到磁盘、数据库或者在网络中进行传输。了解序列化的...
NotSerializableException 是 Java 中的一个异常,它发生在尝试序列化一个不implement Serializable 接口的对象时。今天,我们将讨论 Java 中序列化 NotSerializableException 问题的解决办法。 问题描述 --------...