首页 > 代码库 > DataOutputStream and DataInputStream

DataOutputStream and DataInputStream

        DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("a.txt")));        dos.writeInt(5);        dos.writeBoolean(true);        dos.flush();        dos.close();        DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream("a.txt")));        System.out.println(dis.readInt());        System.out.println(dis.readBoolean());        dis.close();                //学习如何关闭流        BufferedReader br = null;        InputStreamReader in = null;        try {            in = new InputStreamReader(FileStreamTest.class.getResourceAsStream("a.txt"), "UTF-8");            br = new BufferedReader(in);            //按行进行读 br.readLine()        } catch (Exception e) {            e.printStackTrace();        } finally{                if (br != null) {                    try {                        br.close();       //为什么in.close()没写入进去,防止br.close()抛出异常,in.close()得不到关闭。                    } catch (Exception e) {                        e.printStackTrace();                    }                                    }                if (in !=null){                    try {                        in.close();                    } catch (Exception e) {                        e.printStackTrace();                    }                }        }            }


Java所有的流类位于java.io包中,都分别继承字以下四种抽象流类型。

 字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter

1.继承自InputStream/OutputStream的流都是用于向程序中输入/输出数据,且数据的单位都是字节(byte=8bit),如图,深色的为节点流,浅色的为处理流。

 

2.继承自Reader/Writer的流都是用于向程序中输入/输出数据,且数据的单位都是字符(2byte=16bit),如图,深色的为节点流,浅色的为处理流。

节点流类型常见的有:

对文件操作的字符流有FileReader/FileWriter,字节流有FileInputStream/FileOutputStream。

处理流类型常见的有:

缓冲流:缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写效率,同事增加了一些新的方法。

  字节缓冲流有BufferedInputStream/BufferedOutputStream,字符缓冲流有BufferedReader/BufferedWriter,字符缓冲流分别提供了读取和写入一行的方法ReadLine和NewLine方法。

  对于输出地缓冲流,写出的数据,会先写入到内存中,再使用flush方法将内存中的数据刷到硬盘。所以,在使用字符缓冲流的时候,一定要先flush,然后再close,避免数据丢失。

转换流:用于字节数据到字符数据之间的转换。

  仅有字符流InputStreamReader/OutputStreamWriter。其中,InputStreamReader需要与InputStream“套接”,OutputStreamWriter需要与OutputStream“套接”。

数据流:提供了读写Java中的基本数据类型的功能。

  DataInputStream和DataOutputStream分别继承自InputStream和OutputStream,需要“套接”在InputStream和OutputStream类型的节点流之上。

对象流:用于直接将对象写入写出。

  流类有ObjectInputStream和ObjectOutputStream,要求写出的对象必须实现Serializable接口,来声明其是可以序列化的。否则,不能用对象流读写。

  还有一个关键字比较重要,transient,修饰实现了Serializable接口的类内的属性,在以对象流的方式输出的时候,该字段会被忽略。