Spring Cloud OpenFeign 工作原理解析
阿新 • • 發佈:2021-01-11
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; } @Overridepublic 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(intage){ 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); } }