「java敏感字段不序列化」java序列化问题

博主:adminadmin 2022-12-17 21:57:09 69

本篇文章给大家谈谈java敏感字段不序列化,以及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序列化问题的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-17,除非注明,否则均为首码项目网原创文章,转载请注明出处。