>
> 【痕迹】QQ+微信朋友圈和聊天记录分析工具
>
> (1)纯Python语言实现,使用Flask后端,本地分析,不上传个人数据。
>
> (2)内含QQ、微信聊天记录保存到本地的方法,真正实现自己数据自己管理。
>
> (3)数据可视化分析QQ、微信聊天记录,提取某一天的聊天记录与大模型对话。
>
> 下载地址:https://www.alipan.com/s/x6fqXe1jVg1
>
基本原理
在Java编程语言中,transient关键字是一个非访问修饰符,用于类中的字段声明。它的作用是阻止该字段被序列化。序列化是Java中一个重要的机制,允许将对象状态转换为字节序列,以便可以将其存储在文件中或通过网络传输。当对象被反序列化时,这些字节序列可以被恢复为原始对象。
使用transient关键字的字段在序列化过程中会被忽略,这意味着它们不会被写入到序列化的数据中。这通常用于那些不需要持久保存的字段,例如,那些包含临时数据或敏感信息的字段。
代码示例
以下是一些使用transient关键字的示例代码:
示例1:简单的transient字段
public class User {
private String name;
private transient int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// Getter和Setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
在这个例子中,age字段被声明为transient,因此在序列化User对象时,age字段不会被包含。
示例2:transient字段的反序列化
import java.io.*;
public class SerializationDemo {
public static void main(String[] args) {
User user = new User("Alice", 30);
try {
FileOutputStream fos = new FileOutputStream("user.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(user);
oos.close();
fos.close();
FileInputStream fis = new FileInputStream("user.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
User deserializedUser = (User) ois.readObject();
ois.close();
fis.close();
System.out.println("Name: " + deserializedUser.getName());
System.out.println("Age: " + deserializedUser.getAge()); // 将输出0,因为age是transient的
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
在这个示例中,我们序列化了一个User对象,然后将其反序列化。由于age字段是transient的,反序列化后的User对象的age字段将被初始化为默认值,即int类型的默认值0。
示例3:自定义序列化与transient
import java.io.*;
public class CustomSerializationDemo {
static class User implements Serializable {
private String name;
private transient int age;
private void writeObject(ObjectOutputStream oos) throws IOException {
oos.defaultWriteObject();
oos.writeInt(age); // 手动序列化transient字段
}
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
ois.defaultReadObject();
age = ois.readInt(); // 手动反序列化transient字段
}
// 构造器和Getter、Setter方法
}
public static void main(String[] args) {
// 序列化和反序列化的代码与示例2相同
}
}
在这个示例中,我们通过自定义序列化方法来控制transient字段的序列化过程。即使字段是transient的,我们也可以在自定义的序列化方法中手动序列化和反序列化它。
注意事项
transient关键字只能用于字段,不能用于方法或类。- 当一个类继承另一个类时,基类的
transient字段在子类中也会被忽略。 - 如果一个对象包含对其他对象的引用,并且这些对象也有
transient字段,那么在序列化时,这些transient字段也会被忽略。 - 使用
transient关键字可能会影响对象的hashCode()和equals()方法的实现,因为这些方法可能依赖于被标记为transient的字段。
结论
transient关键字在Java中是一个有用的特性,它允许开发者控制序列化过程,排除那些不需要持久保存的字段。通过合理使用transient,可以提高序列化的性能,保护敏感信息,并减少序列化数据的大小。然而,开发者在使用transient时也需要注意其对对象状态和行为的影响。

>
> 【痕迹】QQ+微信朋友圈和聊天记录分析工具
>
> (1)纯Python语言实现,使用Flask后端,本地分析,不上传个人数据。
>
> (2)内含QQ、微信聊天记录保存到本地的方法,真正实现自己数据自己管理。
>
> (3)数据可视化分析QQ、微信聊天记录,提取某一天的聊天记录与大模型对话。
>
> 下载地址:https://www.alipan.com/s/x6fqXe1jVg1
>

1315

被折叠的 条评论
为什么被折叠?



