你的位置:首页 > Java教程

[Java教程]黑马程序员——IO包中的其他类


IO包中的其他类:

   1.打印流:提供了打印方法,可以将各种数据类型的数据原样打印
     字节打印流PrintStream
       构造函数可以接受的参数类型:
         (1)File对象  File
          (2)字符串路径 String
          (3)字节输出流  OutputStream

     字符打印流PrintWriter
        构造函数可以接受的参数类型:
           (1)File对象  File
          (2)字符串路径 String
          (3)字节输出流  OutputStream
           (4)字符输出流:Writer
  2.SequenceInputStream(串联流)
    
     用于把多个流中的数据写入一个流中,构造函数传入Enumeration<? extends InpuStream>
     需要用到Vector       
  3.操作对象
     ObjectInputStream,ObjectOutputStream
       被操作的对象要实现Serializable(标记接口),
     Serializable运行时使用一个称为serialVersionUID的版本号与每个可序列化类相关联,
     次版本号根据类中的成员计算得出。。如果接受者加载该对象的类的serialVersionUID与对应的发送者的版本号不同,则
     反序列化会导致InvalidClassException。可序列化类可以通过声明名为serialVersion的字段(该字段必须是静态,最终的long型字段)
     显式声明自己的serialVersion,如此当改变类成员时,也可反序列化。

     静态成员不会被序列化,因为只能序列化对中的数据,静态成员在方法区。
     如果希望摸个成员不被序列化,可以用transient修饰,保证其值在对内存中存在,而不再文本文件中存在  
     分别使用readObject(Object) 和writeObject(Object)方法读取对象和持久化对象

  4.管道流 PipedInputStream,PipedOutputStream
      管道输入流应该连接到管道输出流;管道输入流提供要写入管道输出流的所有数据字节。
     通常,数据由某个线程从 PipedInputStream 对象读取,并由其他线程将其写入到相应的 PipedOutputStream。
     不建议对这两个对象尝试使用单个线程,因为这样可能死锁线程
     。管道输入流包含一个缓冲区,可在缓冲区限定的范围内将读操作和写操作分离开。
     如果向连接管道输出流提供数据字节的线程不再存在,则认为该管道已损坏
   5.RandomAccessFile :
      该类不算是流体系中的子类,是直接继承自Object
      但是他是IO包成员,因为它具备读写功能
      内部封装了一个数组,而且通过指针对数组的元素进行操作
     可以通过getFilePointer获取指针位置
     同事可以通过seek改变指针位置
     其实完成读写的原理是内部封装了字节输入流和输出流
     通过其构造函数可以看出,该类只能操作文件,而且操作问价还有模式:

   6.操作基本数据类型
     DataInputStream,DataOutputStream
   7.操作字节数组  :用流的读写思想来操作数组
     ByteArrayInputStream:在构造的时候,需要接收数据员,而且数据源是一个字节数组
     ByteArrayOutputStream:在构造的时候,不用定义数据目的地,因为该对象中内部已经封装了可变长度的字节数组
                 这就是数据目的地
     
   因为这两个流对象都操作数组,并没有使用系统资源,所以不用close关闭
     
   8.操作字符数组:CharArrayReader,CharArrayWriter
   9.将字符流转对象化为字节流对象,使用转换流:InputStreamReader(字节通向字符的桥梁)
             InputStreamReader isr=new InputStreamReader(new FileInputStream("gbk.txt"),"gbk")
      OutputStreamWriter(字符通向字节的桥梁)
             OutputStreamReader osr=new OutputStreamReader(new FileOutputStream("utf.txt"),"UTF-8")
  
  10.编码:字符串变成字节数组  String>String  new String(byte[],charsetName)
     Tomcat的编码方式是iso8859-1
       如果使用gbk编码方式存储了数据,取得时候解码用的是iso8859-1,
        此时可以将解码出的数据再用iso8859-1进行编码得到原来的字节数据,然后再用gbk解码即可
     但是如果期初是用utf-8解码而导致乱码,则不可逆转,因为gbk和utf-8均识别中文