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包中,都分别继承字下面四种抽象流类型。

  字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer

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接口,来声明其是能够序列化的。否则,不能用对象流读写。

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




posted @ 2017-04-29 17:58  mfmdaoyou  阅读(229)  评论(0编辑  收藏  举报