serialVersionUID、transient关键字、Properties作为Map集合的使用、特有方法及和IO流结合的方法 Myth丶恋晨 2024-04-07 15:53 11阅读 0赞 **目录** 一、serialVersionUID&transient 二、Properties作为Map集合的使用 三、Properties作为Map集合的特有方法 四、Properties和IO流相结合的方法 -------------------- ## 一、serialVersionUID&transient ## serialVersionUID: > 用对象序列化流序列化了一个对象后,假如我们修改了对象所属的类文件,读取数据会不会出问题呢? > > 会出问题,会抛出**InvalidClassException**异常 > 如果出了问题,如何解决呢? > > 重新序列化 > > 给对象所属的类加一个**serialVersionUID** > > private static final long serialVersionUID = 42L; transient: > 如果一个对象中的某个成员变量的值不想被序列化,又该如何实现呢? > > 给成员变量**transient**关键字修饰,该关键字标记的成员变量不参与序列化过程 示例代码: 学生类 public class Student implements Serializable { private static final long serialVersionUID = 42L; private String name; private transient int age; public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 测试类: public class ObjectStreamDemo { public static void main(String[] args) throws IOException, ClassNotFoundException { // write(); read(); } //反序列化 private static void read() throws IOException, ClassNotFoundException { ObjectInputStream ois = new ObjectInputStream(new FileInputStream("myOtherStream\\oos.txt")); Object obj = ois.readObject(); Student s = (Student) obj; System.out.println(s.getName() + "," + s.getAge()); ois.close(); } //序列化 private static void write() throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("myOtherStream\\oos.txt")); Student s = new Student("林青霞", 30); oos.writeObject(s); oos.close(); } } ## 二、Properties作为Map集合的使用 ## Properties介绍: > 是一个Map体系的集合类 > > Properties可以保存到流中或从流中加载 > > 属性列表中的每个键及其对应的值都是一个字符串 Properties基本使用: public class PropertiesDemo01 { public static void main(String[] args) { //创建集合对象 Properties prop = new Properties(); //存储元素 prop.put("itheima001", "小林"); prop.put("itheima002", "小张"); prop.put("itheima003", "小王"); //遍历集合 Set<Object> keySet = prop.keySet(); for (Object key : keySet) { Object value = prop.get(key); System.out.println(key + "," + value); } } } ## 三、Properties作为Map集合的特有方法 ## 特有方法: <table style="width:500px;"> <tbody> <tr> <td>方法名</td> <td>说明</td> </tr> <tr> <td>Object setProperty(String key,String value)</td> <td>设置集合的键和值,都是String类型,底层调用Hashtable方法put</td> </tr> <tr> <td>String getProperty(String key)</td> <td>使用此属性列表中指定的键搜索属性</td> </tr> <tr> <td>Set stringPropertyNames()</td> <td>从该属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串</td> </tr> </tbody> </table> 示例代码: public class PropertiesDemo02 { public static void main(String[] args) { //创建集合对象 Properties prop = new Properties(); //Object setProperty(String key, String value):设置集合的键和值,都是 //String类型,底层调用Hashtable方法put prop.setProperty("itheima001", "林青霞"); /* Object setProperty(String key, String value) { return put(key, value); } Object put(Object key, Object value) { return map.put(key, value); } */ prop.setProperty("itheima002", "小张"); prop.setProperty("itheima003", "小王"); //String getProperty(String key):使用此属性列表中指定的键搜索属性 // System.out.println(prop.getProperty("itheima001")); // System.out.println(prop.getProperty("itheima0011")); // System.out.println(prop); //Set<String> stringPropertyNames():从该属性列表中返回一个不可修改的键集,其中 键及其对应的值是字符串 Set<String> names = prop.stringPropertyNames(); for (String key : names) { // System.out.println(key); String value = prop.getProperty(key); System.out.println(key + "," + value); } } } ## 四、Properties和IO流相结合的方法 ## 和IO流结合的方法: <table style="width:500px;"> <tbody> <tr> <td>方法名</td> <td>说明</td> </tr> <tr> <td>void load(InputStream inStream)</td> <td>从输入字节流读取属性列表(键和元素对)</td> </tr> <tr> <td>void load(Reader reader)</td> <td>从输入字符流读取属性列表(键和元素对)</td> </tr> <tr> <td>void store(OutputStream out,String comments)</td> <td>将此属性列表(键和元素对)写入此Properties表中,以适合于使用load(InputStream)方法的格式写入输出字节流</td> </tr> <tr> <td>void store(Writer writer,String comments)</td> <td>将此属性列表(键和元素对)写入此Properties表中,以适合使用load(Reader)方法的格式写入输出字符流</td> </tr> </tbody> </table> 示例代码: public class PropertiesDemo03 { public static void main(String[] args) throws IOException { //把集合中的数据保存到文件 // myStore(); //把文件中的数据加载到集合 myLoad(); } private static void myLoad() throws IOException { Properties prop = new Properties(); //void load(Reader reader): FileReader fr = new FileReader("myOtherStream\\fw.txt"); prop.load(fr); fr.close(); System.out.println(prop); } private static void myStore() throws IOException { Properties prop = new Properties(); prop.setProperty("itheima001","小林"); prop.setProperty("itheima002","小张"); prop.setProperty("itheima003","小王"); //void store(Writer writer, String comments): FileWriter fw = new FileWriter("myOtherStream\\fw.txt"); prop.store(fw,null); fw.close(); } }
还没有评论,来说两句吧...