transient

1、开门见山

                    transient使其修饰的变量不可被反序列化(有例外↓)

2、序列化接口目前已知有Serializable和Externlizable

                    ①Serializable:在实现了此接口的类中,若有transient修饰的变量,其可被序列化,

                        但无法被反序列化,即可存储,无法读取

package test.test2;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
 * @description	测试Serializable与Externalizable接口
 * @author  	bb
 * @date    	2018年11月11日 上午7:39:24
 */
public class Transient implements Serializable  {
	//序列化必须写出的ID
	private static final long serialVersionUID = 7254873036673977917L;
    
        //测试字符串
	private transient String content = "无敌bb";
    
        //测试数字
	private transient int i = 6666;
	
	public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
                //声明对象
		Transient t = new Transient();

                //写入对象
		ObjectOutput out = new ObjectOutputStream(new FileOutputStream("src/test/test2/test.dat"));
		out.writeObject(t);
                out.close();

                //读取对象
		ObjectInput in = new ObjectInputStream(new FileInputStream("src/test/test2/test.dat"));
		t = (Transient)in.readObject();
                in.close();

                //打印
		System.out.println(t);
	}
	
	@Override
	public String toString() {
		return content + " " + i;
	}
	
}

                    ②Externlizable:在实现了此接口的类中,若有transient修饰的变量,其可被序列化,

                        也可被反序列化,需实现此接口中的两个方法(readExternal、writeExternal)

package test.test2;

import java.io.Externalizable;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
 * @description	测试Externalizable接口
 * @author  	bb
 * @date    	2018年11月11日 上午7:39:24
 */
public class Transient implements Externalizable  {
	//序列号
	private static final long serialVersionUID = 7254873036673977917L;
    
        //测试字符串
	private transient String content = "无敌bb";
    
        //测试数字
	private transient int i = 6666;
	
	@Override
	public void writeExternal(ObjectOutput out) throws IOException {}

	@Override
	public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {}
	
	public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
                //声明对象
		Transient t = new Transient();
        
                //写入
		ObjectOutput out = new ObjectOutputStream(new FileOutputStream("src/test/test2/test.dat"));
		out.writeObject(t);
                out.close();

                //读取
		ObjectInput in = new ObjectInputStream(new FileInputStream("src/test/test2/test.dat"));
		t = (Transient)in.readObject();//读
                in.close();

		System.out.println(t);
	}
	
	@Override
	public String toString() {
		return content + " " + i;
	}
}

3、注意:

              transient只能修饰变量

              ②用final或static修饰的变量,即使被transient修饰,也可以反序列化(在Serializable中)

这就是目前个人对transient的简单理解,以后若了解更深,会再次更新!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值