IO流二

1 数据流(了解)

1.1 概述

  • 为了方便的操作java语言的基本数据类型和String类型的数据,可以使用数据流。
  • 数据流的分类:
    • DataInputStream
    • DataOutputStream  
  • 常用方法:
    • 读取boolean类型的数据:  
public final boolean readBoolean(){}
public final void writeBoolean(boolean v){}
    • 读取byte类型的数据:  
public final byte readByte(){}
public final void writeByte(int v){}
    • 读取char类型的数据:  
public final void writeChar(int v){}
public final char readChar(){}
    • 读取float类型的数据:  
public final float readFloat(){}
public final void writeFloat(float v){}
    • 读取double类型的数据:  
public final double readDouble(){}
public final void writeDouble(double v){}
    • 读取short类型的数据:  
public final short readShort(){}
public final void writeShort(int v){}
    • 读取long类型的数据:  
public final long readLong(){}
public final void writeLong(long v){}
    • 读取int类型的数据:
public final int readInt(){}
public final void writeInt(int v){}
    • 读取String类型的数据:  
public final String readUTF(){}
public final void writeUTF(String str){}
    • 读取byte[]类型的数据:  
public final void readFully(byte b[]){}
public void write(byte b[]){}

1.2 应用示例

  • 示例:
package day20;

import java.io.*;

public class DataStreamTest {
    public static void main(String[] args) {
        DataOutputStream dataOutputStream = null;
        try {
            dataOutputStream = new DataOutputStream(new FileOutputStream("hello.txt"));
            dataOutputStream.writeBoolean(true);
            dataOutputStream.writeChar('a');
            dataOutputStream.writeUTF("我是中国人");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (dataOutputStream != null) {
                try {
                    dataOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

  • 示例:
package day20;

import java.io.*;

public class DataStreamTest {
    public static void main(String[] args) {
        DataInputStream dataInputStream = null;
        try {
            dataInputStream = new DataInputStream(new FileInputStream("hello.txt"));
            boolean b = dataInputStream.readBoolean();
            System.out.println("读取boolean类型的数据:" + b);
            char c = dataInputStream.readChar();
            System.out.println("读取char类型的数据:" + c);
            String s = dataInputStream.readUTF();
            System.out.println("读取String类型的数据:" + s);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (dataInputStream != null) {
                try {
                    dataInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

2 对象流

2.1 概述

  • ObjectInputStream和ObjectOutputStream是用于存储和读取基本数据类型数据或对应的处理流。
  • 其强大之处在于可以把java对象写入到数据源中,也能把对象从数据源中还原回来。
  • 序列化:用ObjectOutputStream类保存基本数据类型数据或对象的机制。
  • 反序列化:用ObjectInputStream类读取基本数据类型数据或对象的机制。
  • ObjectInputStream和ObjectOutputStream不能序列化static和transient修饰的成员变量。

2.2 对象的序列化

  • 对象序列化机制允许把内存中的java对象转换成平台无关的二进制流,从而允许把这种二进制流持久化的保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其他程序获取了这种二进制流,就可以恢复成原来的java对象。
  • 序列化的好处在于可将任何实现了Serializable接口的对象转换成字节数据,使其在保存和传输的时候可以被还原。
  • 序列化是RMI过程的参数和返回值都必须实现的机制,而RMI是JavaEE的基础。因此序列化机制是JavaEE平台的基础。
  • 如果需要让某个对象支持序列化机制,则必须让对象所属的类及其属性是可序列化的,为了让某个类是可序列化的,该类必须实现Serializable,否则,会抛出NotSerializableException异常。

2.3 应用示例

  • 示例:
package day20;

import java.io.Serializable;

public class Person implements Serializable {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
package day20;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

/**
 * 对象流
 */
public class ObjectStreamTest {
    public static void main(String[] args) {
        ObjectOutputStream objectOutputStream = null;

        try {
            objectOutputStream = new ObjectOutputStream(new FileOutputStream("object.txt"));

            Person person = new Person();
            person.setName("张三");
            person.setAge(12);

            objectOutputStream.writeObject(person);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (objectOutputStream != null) {
                try {
                    objectOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
package day20;

import java.io.*;

/**
 * 对象流
 */
public class ObjectStreamTest {
    public static void main(String[] args) {
        ObjectInputStream objectInputStream = null;
        try {
            objectInputStream = new ObjectInputStream(new FileInputStream("object.txt"));
            Object o = objectInputStream.readObject();
            if (o instanceof Person) {
                Person person = (Person) o;
                System.out.println("姓名:" + person.getName() + ",年龄:" + person.getAge());
            }
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (objectInputStream != null) {
                try {
                    objectInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

转载于:https://www.cnblogs.com/xuweiweiwoaini/p/11115968.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值