13、J2SE基础-过滤流与包装类

1、包装类的概念与作用

        1、通过FileOutputStream对象将一个浮点销售写入到文件中,如何做?能否通过FileOutputStream
        对象直接将一个整数写入到文件呢?
        2、假如有个DataOutputStream类提供了往各种输出流对象中写入各种类型数据的方法,你现在
        所要做的工作就是:传递一个FileOutputStream输出流对象给DataOutputStream实例对象和
        调用DataOutputStream实例对象用于写入浮点小数的方法;
        3、DataOutputStream并没有对应到任何具体的流设备,一定要给它传递一个对应具体流设备的
        输出流对象,完成类似DataOutputStream功能的类就是一个包装类,也叫过滤流类或处理流类;
        4、DataOutputStream包装类的构造函数的语法:
            public DataOutputStream(OutputStream out);


2、BufferedInputStream与BufferedOutputStream类

        1、缓冲流为I/O增加了内存缓冲区,增加缓冲区有两个基本目的:
            -允许java程序异常不只操作一个字节,这样提高了程序的性能;
            -由于有了缓冲区,使得在流上执行skip,mark和reset方法都成为可能;
        2、BufferedInputStream和BufferedOutputStream是java提供的两个缓冲区包装类,
        不管底层系统是否使用了缓冲区,这两个类在字节的实例对象中创建缓冲区。想想这种
        缓冲区与底层系统提供的缓冲区的区别;
        3、BufferedInputStream的两个构造函数
            -BufferedInputStream(InputStream in)
            -BufferedInputStream(InputStream in, int size)
        4、BufferedOutputStream的两个构造函数
            -BufferedOutputStream(InputStream out)
            -BufferedOutputStream(InputStream out, int size)
        5、BufferedReader和BufferedWriter类
           BufferedReader的readLine方法可以一次读取一行文本;
           BufferedWriter的newLine方法可以向字符流中写入不同操作系统下的换行符;


3、DataInputStream与DataOutputStream类

        1、DataOutputStream类提供了三个写入字符串的方法
            -public final void writeBytes(String s)
            -public final void writeChars(String s)
            -public final void writeUTF(String str)
        2、为什么DataInputStream类中有一个readUTF方法,而没有“readBytes”和“readChars”方法呢?
        3、关闭流栈中的最上层的流对象,将会自动关闭流栈中的所有底层流对象;
       

4、PrintStream类

        1、PrintStream类提供了一系列的print和println方法,可以将基本数据类型的数据
        格式化成字符串输出;
        2、格式化输出时什么意思?例如:97被格式化输出的实际字节数据位0x39和0x37
        3、PrintStream有3个构造函数:
            -PrintStream(OutputStream out)
            -PrintStream(OutputStream out,boolean autoflush)
            -PrintStream(OutputStream out,boolean autoflush,String encoding);
        4、与PrintStream对应的PrintWriter类,即使遇到了文本换行标识符(\n),PrintWriter类
        也不会自动清空缓冲区;
        5、PrintWriter的println方法能根据操作系统的不同而生成相应的文本换行标识符。


5、ObjectInputStream与ObjectOutputStream

        1、这两个包装类,用于从底层输入流中读取对象类型的数据和将对象类型的数据写入到底层输出流;
        2、这两个对象所读写的对象必须实现了Serializable接口。对象中的transient和static
        类型的成员变量不会被读取和写入;
        3、编程举例:创建一个可序列化的学生对象,并用ObjectOutputStream类把它存储到一个文件中,
        然后再用ObjectInputStream类把存储的数据读取到一个学生对象中,即恢复保存的学生对象;


6、字节流与字符流的转换

        1、能不能找到一种简单的方式来读取键盘上输入的一行字符,如何找?
        2、InputStreamReader和OutputStreamWriter,是用于将字节流转换成字符流来读写的两个类,
        InputStreamReader可以将一个字节流中的字节解码成字符后读取,OutputStreamWriter将字符
        编码成字节后写入到一个字节流中;
        3、避免频繁的在字符与字节间进行转换,最好不要直接使用InputStreamReader和OutputStreamWriter

        类,用BufferedReader类包装InputStreamReader;


7、字节流与字符流的转换

  1. 在java程序中可以用Process类的实例对象来表示子进程,子进程的标准输入和输出不再连接到键盘和显示器,而是以管道流的形式连接到父进程的一个输出流和输入流对象上;
  2. 调用Process类的getOutputStream和getInputStream方法可以获得连接到子进程的输出流和输入流对象;
  3. 编程实例:在TestInOut类中启动java.exe命令执行另外一个MyTest类;
  4. 验证管道缓冲区后,将发生下面的哪种情况:
    • 新的数据写入时,将最前面写入的数据挤出去,从而发生数据丢失;
    • 与PipedInputStream相连的PipedOutputStream无法再写入新的数据,PipedOutputStream.write方法处于阻塞状态;
    • 与PipedInputStream相连的PipedOutputStream无法再写入新的数据,PipedOutputStream.write方法抛出异常;
  5. 记住调用Process类的destroy方法结束子进程的运行;













你可能感兴趣的:(Java那些事儿——J2SE)