提示

Java IO DataOutputStream 使用示例。@ermo

回到上一级

# DataOutputStream 使用示例

熟悉完装饰器模式,再来看 DataOutputStream 会比较容易理解。

DataOutputStream 是一个装饰类的实现,它的父类是抽象装饰类 FilterOutputStream,主要用于将内存中的数据写入输出流。

通过构造器对 OutputStream 进行增强:

public DataOutputStream(OutputStream out)

DataOutputStream 还实现了 DataOutput 接口,主要定义类一些针对基本类型的写方法:

void writeBoolean(boolean v) throws IOException;

void writeInt(int v) throws IOException;

void writeLong(long v) throws IOException;

void writeUTF(String s) throws IOException;

void writeDouble(double v) throws IOException;

来看一个简单的例子。

先定义一个简单的订单类 Order,省略 getter/setter 方法:

public class Order {

    private String orderNo;

    private Integer orderType;

    private Double orderAmount;

    public Order() {}

    public Order(String orderNo, Integer orderType, Double orderAmount) {
        this.orderNo = orderNo;
        this.orderType = orderType;
        this.orderAmount = orderAmount;
    }
}
    public static void write() throws IOException {

        List<Order> orders = Arrays.asList(
                new Order("OA123", 1, 10.5),
                new Order("OA456", 2, 20.5));

        String filepath = "src/main/resources/order.txt";
        DataOutputStream out = new DataOutputStream(new FileOutputStream(filepath));
        try {
            out.writeInt(orders.size());
            for (Order order : orders) {
                out.writeUTF(order.getOrderNo());
                out.writeInt(order.getOrderType());
                out.writeDouble(order.getOrderAmount());
            }
        } finally {
            out.close();
        }
    }

    public static void main(String[] args) throws IOException {
        write();
    }

上例中对 FileOutputStream 进行了装饰,然后将 Order 对象中的数据写入文件中。

文件 order.txt 无法打开的,内部存储的是二进制数据。