1. DataInputStream 与 DataOutputStream
数据流,例如可以将整型写到了文件里面,此时文件就成了一个二进制的文件,显然字节流既可以处理文本文件,也可以处理二进制的的文件。任何文件都可以用它来处理。
查看JDK Doc文档DataOutputStream
public class DataOutputStream extends FilterOutputStream implements DataOutput
显然它是一个过滤流,它不能直接跟文件打交道,它必须包装一个结点流,查看其构造方法
它接受的是一个OutputStream,换句话说假如有一个结点流,之前被过滤流所包装了,显然它还可以继续包装过滤流。
查看其方法很多都是例如 writeBoolean() 的 "write + 数据类型" 的方式,向文件里面写个boolean类型的信息,注意这边写进出的不是字符串的"true"了,是一个boolean类型的true信息,所以写完之后的文件就是一个二进制的文件,打开就是乱码形式,既然能写进去后是二进制文件,说明里面有一种二进制的机制,所以根据根据写的顺序读取出来。
程序demo:
【说明】:编译执行生成data.txt文件,这是一个二进制文件,打开是乱码形式,然后在命令行输出一下内容: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()); } }
3
12
a
3.3
2. 还有几种其它的流的概念,比如PushbackInputStream(推回输入流)、SequenceInputStream(顺序输入流)等,这些IO流在实际开发中用的不多,所以就不具体介绍,我们在实际开发中用的最多的IO流有一下几个:
3. 使用数据文件流的一般步骤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
(1)建立字节文件流对象;
(2)基于字节文件流对象建立数据文件流对象;
(3)用流对象的方法对基本类型的数据进行输入/输出。
4. 实现我们自己的I/O流
未完待续,我会回过投来再重新学习这一块知识。