提示
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 无法打开的,内部存储的是二进制数据。