JavaSE第九十二讲:数据流深入详解

1. DataInputStream 与 DataOutputStream

数据流,例如可以将整型写到了文件里面,此时文件就成了一个二进制的文件,显然字节流既可以处理文本文件,也可以处理二进制的的文件。任何文件都可以用它来处理。

查看JDK Doc文档DataOutputStream 

public class DataOutputStream extends FilterOutputStream implements DataOutput

显然它是一个过滤流,它不能直接跟文件打交道,它必须包装一个结点流,查看其构造方法


它接受的是一个OutputStream,换句话说假如有一个结点流,之前被过滤流所包装了,显然它还可以继续包装过滤流。

查看其方法很多都是例如 writeBoolean() 的 "write + 数据类型" 的方式,向文件里面写个boolean类型的信息,注意这边写进出的不是字符串的"true"了,是一个boolean类型的true信息,所以写完之后的文件就是一个二进制的文件,打开就是乱码形式,既然能写进去后是二进制文件,说明里面有一种二进制的机制,所以根据根据写的顺序读取出来。

程序demo:

package com.ahuier.io;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class DateStream {
    public static void main(String[] args) throws Exception {
        /*
         * FileOutputStream结点流,它被两个过滤流DataOutputStream和BufferedOutputStream包装
         * 代码的的意思是:向文件当中以缓存的方式写入Java的基本数据类型
         */
        DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(
                new FileOutputStream("data.txt")));

        byte b = 3;
        int i = 12;
        char ch = 'a';
        float f = 3.3f;

        // 注意这边写进去的不是一个数值本身的信息,而是带这种数据类型的信息。所以写进去的文件是一个二进制的文件,打开是乱码
        dos.writeByte(b);
        dos.writeInt(i);
        dos.writeChar(ch);
        dos.writeFloat(f);
        dos.close();

        // 将文件内容以缓存的方式读取
        DataInputStream dis = new DataInputStream(new BufferedInputStream(
                new FileInputStream("data.txt")));
        /*
         * 注意这边读出的顺序必须要和写入的顺序是一致的 原因是因为它写入的是
         * 带数据类型的值的信息,所以写进去按这种机制写进去,读出来也要按这种机制读出来。不然二进制位数错乱,会导致输出的内容也是错乱的。
         */
        System.out.println(dis.readByte());
        System.out.println(dis.readInt());
        System.out.println(dis.readChar());
        System.out.println(dis.readFloat());
    }
}
【说明】:编译执行生成data.txt文件,这是一个二进制文件,打开是乱码形式,然后在命令行输出一下内容:

3
12
a
3.3

2. 还有几种其它的流的概念,比如PushbackInputStream(推回输入流)、SequenceInputStream(顺序输入流)等,这些IO流在实际开发中用的不多,所以就不具体介绍,我们在实际开发中用的最多的IO流有一下几个:

1) FileInputStream 和 FileOutputStream [比如说在网页上传文件,从客户端上传通过网络上传到服务器的场景]

2) BufferedInputStream 和 BufferedOutputStream

3) ByteArrayInputStream 和 ByteArrayOutputStream

其他的一般用的比较少,用到的时候可以去看一下,这边传一份IO流的文档,张龙老师的PPT笔记

张龙(风中叶)blog:http://blog.csdn.net/ricohzhanglong

IO流PPT下载网址:http://download.csdn.net/detail/xukunhui2/5018403

3. 使用数据文件流的一般步骤

(1)建立字节文件流对象;

(2)基于字节文件流对象建立数据文件流对象;

(3)用流对象的方法对基本类型的数据进行输入/输出。

4. 实现我们自己的I/O流

未完待续,我会回过投来再重新学习这一块知识。






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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值