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;
    }

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