「java敏感字段不序列化」java序列化问题
本篇文章给大家谈谈java敏感字段不序列化,以及java序列化问题对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java 序列化怎么标记为不可序列化的字段?
- 2、java中静态不能被序列化的疑问
- 3、java 方法中含有 transient 是什么意思?
- 4、怎样对带有不可序列化属性的Java对象进行序列化
- 5、java默认序列化如何去做,哪些字段不会被序列化
java 序列化怎么标记为不可序列化的字段?
java序列化中如果要标记为不可序列化的字段,可以使用关键字:tranisant修饰。
Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想 用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。
transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。
java中静态不能被序列化的疑问
对象的序列化是操作的堆内存中的数据,静态的变量又称作类变量。类一加载,就初始化了。静态变量在方法区里。zhang,,12,,haha这个对象是可以创建的,非静态可以访问静态。当你序列化zhang,,12,,haha这个对象的时候,类的静态变量是先于非静态加载进来的。当序列化的时候,首先读到了静态的,后边的非静态就不会被取走。所以我们说,序列化静态的变量是没有意义的。非静态的变量如果不想被序列化可以用transient修饰。
java 方法中含有 transient 是什么意思?
transient”——“瞬态”,先不说这个翻译是否恰当,这个变量关键字一直不曾使用,简单的说就是被瞬态定义的变量不可序列号。或者这么给他换个名字——“不可序列化状态”。
打个比方,如果一个用户有一些敏感信息(譬如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输。这些信息对应的变量就可以被定义为transient类型。换句话说,这个字段的生命周期仅存于调用者的内存中。
如定义类:
public class People implements Serializable {
private static final long serialVersionUID = 8294180014912103005L;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private transient String password;
}
密码字段为transient,这时候如果对该对象进行序列化,这个密码字段是不会被保存的。
以下例子展示了这个行为:
public static void main(String[] args) throws Exception {
People p = new People();
p.setUsername("snowolf");
p.setPassword("123456");
System.err.println("------操作前------");
System.err.println("username: " + p.getUsername());
System.err.println("password: " + p.getPassword());
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
"people.txt"));
oos.writeObject(p);
oos.flush();
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
"people.txt"));
p = (People) ois.readObject();
ois.close();
System.err.println("------操作后------");
System.err.println("username: " + p.getUsername());
System.err.println("password: " + p.getPassword());
}
执行结果是:
------操作前------
username: snowolf
password: 123456
------操作后------
username: snowolf
password: null
怎样对带有不可序列化属性的Java对象进行序列化
1、序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。
2、可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
3、序列化的实现:
1)、将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的
2)、然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象
3)、接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
java默认序列化如何去做,哪些字段不会被序列化
需要序列化的类实现 Serialization 接口,基本数据类型都会被实例化,其他类型默认不会实例化
关于java敏感字段不序列化和java序列化问题的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-17,除非注明,否则均为
原创文章,转载请注明出处。