Java IO 數據流 and 對象流

數據流

package 學習資料.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;

/**
 * 數據流
 * 先寫出後讀取
 * 讀寫順序一致
 * 順序問題可以通過class建立相應的方法規範輸入輸出的順序
 *
 */
public class _2_1_數據流Data {
    public static void main(String[] args) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(baos));

        dos.writeUTF("這個寫入的是字符串");
        dos.writeInt(18);//整數
        dos.writeBoolean(true);//boolen值
        dos.writeChar('c');//字符
        //dos.writeChars("這個也是字符串");   //這個沒有對應的read所以不要用
        dos.flush();

        byte[] datas = baos.toByteArray();
        DataInputStream dis =
                new DataInputStream(
                        new BufferedInputStream(
                                new ByteArrayInputStream(datas)));
        System.out.println(dis.readUTF());
        System.out.println(dis.readInt());
        System.out.println(dis.readBoolean());
        System.out.println(dis.readChar());

    }
}

對象流

package 學習資料.IO流;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;


public class _2_2_對象流Object {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(baos));

        oos.writeUTF("這個寫入的是字符串");
        oos.writeInt(18);
        oos.writeBoolean(true);
        oos.writeChar('c');
        //dos.writeChars("這個也是字符串");   //這個沒有對應的read所以不要用

        oos.writeObject("字符串對象");
        oos.writeObject(new human(2020,"澎湃",6.5));

        oos.flush();

        byte[] datas = baos.toByteArray();
        ObjectInputStream ois =
                new ObjectInputStream(
                        new BufferedInputStream(
                                new ByteArrayInputStream(datas)));
        System.out.println(ois.readUTF());
        System.out.println(ois.readInt());
        System.out.println(ois.readBoolean());
        System.out.println(ois.readChar());

        Object object = ois.readObject();
        if(object instanceof String) System.out.println((String)object);

        object = ois.readObject();
        if(object instanceof human ) { //instanceof 是比較是否是相同類

            human human = (human)object;
            System.out.println(human.getA()+human.getbString()+human.getC());
        }
        //要注意的是就算讀到想要的數據以後,也得把剩餘數據讀取出來

        oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("object.nmsl")));

        oos.writeObject(object);

        oos.close();

    }
}
class human implements Serializable{//Serializable 是 對象流的通行證,該接口沒有任何抽象方法,僅僅只是給底層判斷是否可以給對象流寫出的通行證
    /**
     *
     */
     //這麼不要看 標識符
    private static final long serialVersionUID = -6508333476491846459L
    int a;
    String bString;
    double c;
    public human(int a, String bString, double c) {
        super();
        this.a = a;
        this.bString = bString;
        this.c = c;
    }
    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public String getbString() {
        return bString;
    }

    public void setbString(String bString) {
        this.bString = bString;
    }

    public double getC() {
        return c;
    }

    public void setC(double c) {
        this.c = c;
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章