1. 程式人生 > 實用技巧 >Spring Cloud OpenFeign 工作原理解析

Spring Cloud OpenFeign 工作原理解析

jvav序列化與反序列化

在建立序列化與反序列之前需要建立一個類

import java.io.Serializable;

/*
序列化和反序列化的時候,會丟擲NotSerializableException沒有序列化異常
類通過實現java.io.Serializable介面以啟動其序列化功能,來實現此介面的類將無法使其任何狀態序列化或反序列化
Serializable介面也叫標記型介面
    要進行序列化和反序列化的類必須實現Serializable介面,就會給類新增一個標記
    當我們進行序列化和反序列化的時候,就會檢測類上是否有這個標記
        有:就可以序列化和反序列化
        沒有:就會丟擲NotSerializableException異常
    
        static關鍵字:靜態關鍵字
            靜態優先於非靜態載入到記憶體中(靜態優先於物件進入到記憶體中)
            被static修飾的成員變數不能被序列化,序列化的都是物件
            
        transient關鍵字:瞬態關鍵字
            被transient修飾的成員變數不能被序列化。
            

*/ public class Person implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private String name; private int age; public Person(){ } public Person(String name,int age){ this.name = name; this.age = age; } @Override
public String toString() { return "Person{ name=" + name +'\'' + "age=" + age +'}'; } public String getName(){ return name; } public int getAge(){ return age; } public void setName(String name){ this.name=name; } public void setAge(int
age){ this.age=age; } }


把物件以流的方式,寫入到檔案中儲存,叫寫物件,也叫物件的序列化
物件中包含的不僅僅是字元,所以使用位元組流
ObjectOutputStream使物件的序列化流
使用writeObject()將物件寫入到檔案中

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

/*
java.io.ObjedtOutputStream extends OutputStream
ObjectOutputStream 物件的序列化流
作用:把物件以流的方式寫入到檔案中儲存
構造方法:
    ObjectOutputStream(OutputStream out)建立寫入指定OutputStream的ObjectOutputStream
    引數:
        OutputStream out:位元組輸出流
特有的成員方法:
    void writeObject(Object obj)將指定的物件寫入  ObjectOutputStream
使用步驟:
    建立ObjectOutputStream物件,構造方法中傳遞位元組輸出流
    使用ObjectOutputStream物件中的方法writeObject,把物件寫入到檔案中
    釋放資源
*/

public class DemoObjectOutputStream {
    public static void main(String[] args) throws IOException{
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.txt"));
        oos.writeObject(new Person("lll",18));
        oos.close();
    }
}

把檔案中儲存的物件,以流的方式讀取出來,叫做讀物件,也叫物件的反序列化流
讀取的檔案儲存的都是位元組,使用位元組流
ObjectInputStream:物件的反序列化流
使用readObject()將物件讀取到java程式中

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

/*
java.io.ObjectInputStream extends InputStream
ObjectInputStream:物件的反序列化流
作用:把檔案中儲存的物件,以流的方式讀取出來使用
構造方法:
    ObjectInputStream(InputStream in)建立從指定 InputStream讀取的 ObjectInputStream
    引數:
        InputStream in :位元組輸入流
特有的成員方法
    readObject()  從ObjectInputStream讀取物件
使用步驟:
    建立ObjectInputStream物件,構造方法中傳遞位元組輸入流
    使用ObjectInputStream中的方法readObject()讀取儲存物件的方法
    釋放資源
    使用讀取出來的物件

readObject方法宣告丟擲了 ClassNotFoundException(class檔案找不到異常)當不存在物件的class檔案時,丟擲此異常
反序列的前提:
    類必須實現介面Serializable
    必須存在類對應的class檔案
*/

public class DemoObjectInputStream {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.txt"));
        Object o = ois.readObject();
        ois.close();
        System.out.println(o);
    }
}