Java IO (三)

打印流

         1,基本流和高效流操作的数据类型有限,如果我想操作不同数据类型的数据。那么它是做不到的。

              这个时候,Java提供了一种流对象的类:打印流。

              字节打印流:PrintStream

              字符打印流:PrintWriter

              注意:打印流仅提供了输出,并没有对应的读取功能。

              

         2,特点:

                  a,打印流可以输出任意类型数据。

                  b,如果启用了自动刷新,调用println()方法的时候,可以自动刷新并换行。

                  c,可以直接操作文件。

                             哪些流对象可以直接操作文件呢?

                                   看其构造方法, 同时有File和String构造参数的。

        3,案例:

打印流案例

     可变参数

      1,在定义功能的时候,可能不知道将来需要多少个参数,Java提供了一种可变参数的用法。

      2,格式:

                修饰符 返回值类型  函数名(形式参数....变量){

          

               }

            注意:

                    这里的变量其本质是该参数类型的一个数组。

                这里会把调用这数据自动封装成一个数组。

                如果一个方法中有可变参数,并且有多个形式参数,如果可变参数在前,会把所有的参数封装成一个数组,因此需要把可变参数放后面。

     3,应用:

               public static <T> List <T> asList(T...a)

                 把数组转成集合。

                 注意:

                       这里的数组应该是引用类型。

                       转换后的数组长度是固定的,不能做增删操作,可做修改操作。

               public PrintWriter printf(String format,Object...args)

                 把后面的数据按照前面的格式输出。

                 格式:%d

 

Properties

             1,是一个集合类hashtable的子类,内置了IO流的操作,是一个唯一能和IO流结合使用的集合类。

             2,属性列表中键及其对应值都是一个字符串。

             3,特有功能 :

                    添加:  

                       Object setProperty(String key,String value)

                    获取:

                       String getProperty(String key)

                       String getProperty(String key,String defaultValue)

                       Set<String> stringPropertyNames()

//示例
Properties prop=new Properties();

prop.setProperty("01","hello");
prop.setProperty("02","world");
prop.setProperty("03","java");

Set<String> set=prop.stringPropertyNames();
for(String key:set){
    String value=prop.getProperty(key);
    System.out.println(key+""+value);
}

             4,和IO流结合的功能:

                       a,list把集合中的数据写到文本文件。只能使用打印流。

                       b,load把文本文件中的数据加载到集合中。

                       c,store把集合中的数据写到文本文件。

             5,案例:

Properties案例

                      


序列化

1,Serialized,就是把对象按照流一样的操作。主要用于网络传输。

2,序列化和反序列化:

        ObjectOutputStream

                   writeObject(Object obj)

        ObjectInputStream

                   readObject(Object obj)

3,类通过 java.io.Serialized实现序列化接口,以启用序列化功能。

     序列化接口是一个标记接口,如果一个类实现了这个接口,仅仅表示这个类的对象可以像流数据一样的存储或网络中传输。

4,注意事项:

            a,类实现序列化接口,需要知道,这个类的对象可以像流一样使用。

            b,实现序列化接口的类,是可以被序列化流操作的。

            c,类实现序列化接口时,如果对类中的内容有所改动,将会读取失败,并报java.io.InvalidClassException异常,怎么解决?

                  一个类序列化的时候,会有一个标记值。

                  在生成class文件的时候也会有这个标记值。

                  在把该类对象往文件中存储的时候,同时会存储该标记值。

                  但是,如果修改了类的内容,它会自动生成一个新的标记值,这样就和原来的标记值不匹配了。

                      定义标记值:

                                因此需要定义一个标记值,可以自动生成,也可以自定义。

                                private static final long seriaVersionUID=10000;

 

原文地址:https://www.cnblogs.com/zhanfuxing/p/3662304.html