zoukankan      html  css  js  c++  java
  • 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;

     

  • 相关阅读:
    【UVa#10325】The Lottery
    【洛谷P1868】饥饿的奶牛
    【NOI2005】维护数列
    【NOIP2018】保卫王国
    【洛谷P4719】动态dp
    【NOI2014】魔法森林
    【洛谷P4234】最小差值生成树
    【国家集训队】Tree II
    面试1
    struts2中的方法的调用
  • 原文地址:https://www.cnblogs.com/zhanfuxing/p/3662304.html
Copyright © 2011-2022 走看看