Java——IO流(二)-(6/7):其他流-数据流(DataOutputStream、DatalnputStream)、序列化流(ObjectOutputStream......)

目录

数据流

DataOutputStream(数据输出流)

实例演示(1)

DatalnputStream(数据输入流)

实例演示(2)

序列化流

序列化

实例演示(3)

反序列化

实例演示(4)


数据流

DataOutputStream(数据输出流)

  • 允许把数据和其类型一并写出去。
构造器说明
public DataOutputStream(OutputStream out)创建新数据输出流包装基础的字节输出流
方法说明
public final void writeByte(int v) throws IOExceptionbyte类型的数据写入基础的字节输出流
public final void writeInt(int v) throws IOExceptionint类型的数据写入基础的字节输出流
public final void writeDouble(Double v) throws IOExceptiondouble类型的数据写入基础的字节输出流
public final void writeUTF(String str) throws IOException字符串数据以UTF-8编码成字节写入基础的字节输出流
public void write(int/byte[]/byte[]—部分)支持写字节数据出去

实例演示(1)

import java.io.DataOutputStream;
import java.io.FileOutputStream;

public class DataOutputStreamTest {
    public static void main(String[] args) {
        try(
                //1.创建一个数据输出流包装低级的字节输出流
                DataOutputStream dos =
                        new DataOutputStream(new FileOutputStream("HelloWorld/src/testFile4.txt"));
                ){
            dos.writeInt(97);
            dos.writeDouble(99.5);
            dos.writeBoolean(true);
            dos.writeUTF("柚子");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

DatalnputStream(数据输入流)

  • 用于读取数据输出流写出去的数据。
构造器说明
public DataInputStream(InputStream is)创建新数据输入流包装基础的字节输入流
方法说明
public final byte readByte() throws IOException读取字节数据返回
public final int readInt() throws IOException读取int类型的数据返回
public final double readDouble() throws IOException读取double类型的数据返回
public final String readUTF() throws IOException读取字符串数(UTF-8)据返回
public int readInt()/read(byte[])支持读字节数据进来

实例演示(2)

import java.io.DataInputStream;
import java.io.FileInputStream;

public class DataInputStreamTest {
    public static void main(String[] args) {
        try(
                DataInputStream dis =
                        new DataInputStream(new FileInputStream("HelloWorld/src/testFile4.txt"));
                ){
            int i = dis.readInt();
            System.out.println(i);

            double d = dis.readDouble();
            System.out.println(d);

            boolean b = dis.readBoolean();
            System.out.println(b);

            String rs = dis.readUTF();
            System.out.println(rs);
        }catch (Exception e){

        }
    }
}

运行结果:

序列化流

  • 对象序列化:把Java对象写入到文件中去
  • 对象反序列化:把文件里的Java对象读出来

序列化

ObjectOutputStream(对象字节输出流)

  • 可以把Java对象进行序列化:把Java对象存入到文件中去。
构造器说明
public ObjectOutputStream(OutputStream out)创建对象字节输出流,包装基础的字节输出流
方法说明
public final void writeObject(Object o) throws IOException把对象写出去

注意:对象如果要参与序列化,必须实现序列化接口(java.io.Serializable)

实例演示(3)

定义一个测试用的User类:

import java.io.Serializable;

//注意:如果对象需要序列化,必须实现序列化接口!
public class User implements Serializable {
    private String loginName;
    private String userName;
    private int age;
    private String passWord;

    public User() {
    }

    public User(String loginName, String userName, int age, String passWord) {
        this.loginName = loginName;
        this.userName = userName;
        this.age = age;
        this.passWord = passWord;
    }

    public String getLoginName() {
        return loginName;
    }

    public void setLoginName(String loginName) {
        this.loginName = loginName;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    @Override
    public String toString() {
        return "User{" +
                "loginName='" + loginName + '\'' +
                ", userName='" + userName + '\'' +
                ", age=" + age +
                ", passWord='" + passWord + '\'' +
                '}';
    }
}
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class ObjectOutputStreamTest {
    public static void main(String[] args) {
        try(
                //2.创建一个对象字节输出流包装原始的字节输出流。
                ObjectOutputStream oos =
                        new ObjectOutputStream(new FileOutputStream("HelloWorld/src/testFile5.txt"))
                ){
            //1.创建一个Java对象
            User u = new User("admin","张三",32,"66668888");
            //3.序列化对象到文件中去
            oos.writeObject(u);
            System.out.println("序列化对象成功!");
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

反序列化

ObjectInputStream(对象字节输入流)

  • 可以把Java对象进行反序列化:把存储在文件中的Java对象读入到内存中来。
构造器说明
public ObjectInputStream(InputStream is)创建对象字节输入流,包装基础的字节输入流
方法说明
public final Object readObject()把存储在文件中的Java对象读出来

实例演示(4)

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

public class ObjectInputStreamTest {
    public static void main(String[] args) {
        try(
                //1.创建一个对象字节输入流管道,包装低级的字节输入流与源文件接通
                ObjectInputStream ois =
                        new ObjectInputStream(new FileInputStream("HelloWorld/src/testFile5.txt"));
                ){
            User u = (User) ois.readObject();
            System.out.println(u);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

运行结果:

指定成员变量不参与序列化:

如果要一次序列化多个对象:

用一个ArrayList集合存储多个对象,然后直接对集合进行序列化即可

注意:ArrayList集合已经实现了序列化接口!


END


学习自:黑马程序员——Java课程

  • 14
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值