對象流的理解

講一下對象流

數據流操作的是我們的基本數據類型和字符串

對象流除了基本數據類型和字符串還包括我們其它的各種對象(也包括我們自定義的對象)

所以對象流是數據流的升級版

同時這個流有個特殊的叫法叫做序列化和反序列化

不是所有的對象都可以序列化(必須要有通行證),必須實現

Serializable接口

對象流的理解

對象流的理解

對象流的理解

對象流的理解

對象流的理解

對象流的理解

對象流的理解

java 中的instanceof 運算符是用來判斷對象是否是 特定類或這個特定類的子類 的一個實例。

transient是透明的意識,無法讀取到透明的內容

對象流的理解


對象流的理解

對象流的理解

對象把它輸入到字節流裡面,然後存儲到文件,數據庫或者內存中(內存指的就是字節數組)。

<code>package cn.jd.io;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Date;
/*
* 對象流:
* 1先寫出後讀取
* 2讀取的順序和寫出保持一致
* 3不是所有的對象都可以序列化Serializable
*/
public class ObjectTest2 {
\tpublic static void main(String[] args) throws IOException, ClassNotFoundException {
\t\tByteArrayOutputStream baos=new ByteArrayOutputStream();
\t\tObjectOutputStream oos=new ObjectOutputStream(new BufferedOutputStream(baos));
\t\toos.writeUTF("我太難了");
\t\toos.writeInt(18);
\t\toos.writeBoolean(false);
\t\t//加入對象
\t\toos.writeObject("希望世界和平");
\t\toos.writeObject(new Date());
\t\tEmployee emp=new Employee("小二",400);
\t\toos.writeObject(emp);
\t\toos.flush();
\t\tbyte[] datas=baos.toByteArray();
\t\tObjectInputStream ois=new ObjectInputStream(new BufferedInputStream(new ByteArrayInputStream(datas)));
\t\t String msg=ois.readUTF();
\t\t int age=ois.readInt();
\t\t boolean flag=ois.readBoolean();
\t\t Object str=ois.readObject();

\t\t Object date=ois.readObject();
\t\t Object employee=ois.readObject();
\t\t //接下來我們就將類型還原,這裡我們必須加上類型轉換
\t\t if(str instanceof String) {
\t\t\t String strObj=(String)str;
//\t\t\t System.out.println(strObj);
\t\t }
\t\t if(date instanceof Date) {
\t\t\t Date dateObj=(Date)date;
//\t\t\t System.out.println(dateObj);
\t\t }
\t\t if(employee instanceof Employee) {
\t\t\tEmployee empObj=(Employee)employee;
//\t\t\t System.out.println(empObj.getName()+"-->"+empObj.getSalary());
\t\t }
//\t\t System.out.println(msg);
\t\t
\t\t
\t\t
\t\t
\t}
}
//寫了一個javabean類 後期用來封裝數據 transient
class Employee implements java.io.Serializable{
\tprivate transient String name;
\tprivate double salary;
\tpublic Employee() {
\t\t
\t}
\tpublic Employee(String name, double salary) {
\t\tthis.name = name;
\t\tthis.salary = salary;
\t}
\tpublic String getName() {
\t\treturn name;
\t}
\tpublic void setName(String name) {
\t\tthis.name = name;
\t}
\tpublic double getSalary() {
\t\treturn salary;
\t}
\tpublic void setSalary(double salary) {
\t\tthis.salary = salary;
\t}
\t
\t

}

/<code>



分享到:


相關文章: