码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • serialVersionUID、transient关键字、Properties作为Map集合的使用、特有方法及和IO流结合的方法


    目录

    一、serialVersionUID&transient

    二、Properties作为Map集合的使用

    三、Properties作为Map集合的特有方法

    四、Properties和IO流相结合的方法


    一、serialVersionUID&transient

    serialVersionUID:

    用对象序列化流序列化了一个对象后,假如我们修改了对象所属的类文件,读取数据会不会出问题呢?

            会出问题,会抛出InvalidClassException异常

    如果出了问题,如何解决呢?

    重新序列化

    给对象所属的类加一个serialVersionUID

            private static final long serialVersionUID = 42L;

    transient:

    如果一个对象中的某个成员变量的值不想被序列化,又该如何实现呢?

            给成员变量transient关键字修饰,该关键字标记的成员变量不参与序列化过程

    示例代码:

    学生类

    1. public class Student implements Serializable {
    2. private static final long serialVersionUID = 42L;
    3. private String name;
    4. private transient int age;
    5. public Student() {
    6. }
    7. public Student(String name, int age) {
    8. this.name = name;
    9. this.age = age;
    10. }
    11. public String getName() {
    12. return name;
    13. }
    14. public void setName(String name) {
    15. this.name = name;
    16. }
    17. public int getAge() {
    18. return age;
    19. }
    20. public void setAge(int age) {
    21. this.age = age;
    22. }
    23. }

    测试类:

    1. public class ObjectStreamDemo {
    2. public static void main(String[] args) throws IOException,
    3. ClassNotFoundException {
    4. // write();
    5. read();
    6. }
    7. //反序列化
    8. private static void read() throws IOException, ClassNotFoundException {
    9. ObjectInputStream ois = new ObjectInputStream(new
    10. FileInputStream("myOtherStream\\oos.txt"));
    11. Object obj = ois.readObject();
    12. Student s = (Student) obj;
    13. System.out.println(s.getName() + "," + s.getAge());
    14. ois.close();
    15. }
    16. //序列化
    17. private static void write() throws IOException {
    18. ObjectOutputStream oos = new ObjectOutputStream(new
    19. FileOutputStream("myOtherStream\\oos.txt"));
    20. Student s = new Student("林青霞", 30);
    21. oos.writeObject(s);
    22. oos.close();
    23. }
    24. }

    二、Properties作为Map集合的使用

    Properties介绍:

    是一个Map体系的集合类

    Properties可以保存到流中或从流中加载

    属性列表中的每个键及其对应的值都是一个字符串

    Properties基本使用:

    1. public class PropertiesDemo01 {
    2. public static void main(String[] args) {
    3. //创建集合对象
    4. Properties prop = new Properties();
    5. //存储元素
    6. prop.put("itheima001", "小林");
    7. prop.put("itheima002", "小张");
    8. prop.put("itheima003", "小王");
    9. //遍历集合
    10. Set keySet = prop.keySet();
    11. for (Object key : keySet) {
    12. Object value = prop.get(key);
    13. System.out.println(key + "," + value);
    14. }
    15. }
    16. }
    17. 三、Properties作为Map集合的特有方法

      特有方法:

      方法名说明
      Object setProperty(String key,String value)设置集合的键和值,都是String类型,底层调用Hashtable方法put
      String getProperty(String key)使用此属性列表中指定的键搜索属性
      Set stringPropertyNames()从该属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串

      示例代码:

      1. public class PropertiesDemo02 {
      2. public static void main(String[] args) {
      3. //创建集合对象
      4. Properties prop = new Properties();
      5. //Object setProperty(String key, String value):设置集合的键和值,都是
      6. //String类型,底层调用Hashtable方法put
      7. prop.setProperty("itheima001", "林青霞");
      8. /*
      9. Object setProperty(String key, String value) {
      10. return put(key, value);
      11. }
      12. Object put(Object key, Object value) {
      13. return map.put(key, value);
      14. }
      15. */
      16. prop.setProperty("itheima002", "小张");
      17. prop.setProperty("itheima003", "小王");
      18. //String getProperty(String key):使用此属性列表中指定的键搜索属性
      19. // System.out.println(prop.getProperty("itheima001"));
      20. // System.out.println(prop.getProperty("itheima0011"));
      21. // System.out.println(prop);
      22. //Set stringPropertyNames():从该属性列表中返回一个不可修改的键集,其中
      23. 键及其对应的值是字符串
      24. Set names = prop.stringPropertyNames();
      25. for (String key : names) {
      26. // System.out.println(key);
      27. String value = prop.getProperty(key);
      28. System.out.println(key + "," + value);
      29. }
      30. }
      31. }

      四、Properties和IO流相结合的方法

      和IO流结合的方法:

      方法名说明
      void load(InputStream inStream)从输入字节流读取属性列表(键和元素对)
      void load(Reader reader)从输入字符流读取属性列表(键和元素对)
      void store(OutputStream out,String comments)将此属性列表(键和元素对)写入此Properties表中,以适合于使用load(InputStream)方法的格式写入输出字节流
      void store(Writer writer,String comments)将此属性列表(键和元素对)写入此Properties表中,以适合使用load(Reader)方法的格式写入输出字符流

      示例代码:

      1. public class PropertiesDemo03 {
      2. public static void main(String[] args) throws IOException {
      3. //把集合中的数据保存到文件
      4. // myStore();
      5. //把文件中的数据加载到集合
      6. myLoad();
      7. }
      8. private static void myLoad() throws IOException {
      9. Properties prop = new Properties();
      10. //void load(Reader reader):
      11. FileReader fr = new FileReader("myOtherStream\\fw.txt");
      12. prop.load(fr);
      13. fr.close();
      14. System.out.println(prop);
      15. }
      16. private static void myStore() throws IOException {
      17. Properties prop = new Properties();
      18. prop.setProperty("itheima001","小林");
      19. prop.setProperty("itheima002","小张");
      20. prop.setProperty("itheima003","小王");
      21. //void store(Writer writer, String comments):
      22. FileWriter fw = new FileWriter("myOtherStream\\fw.txt");
      23. prop.store(fw,null);
      24. fw.close();
      25. }
      26. }
    18. 相关阅读:
      脚手架应用场景之快速搭建项目
      MySQL事务的隔离级别
      绘图系统三:支持散点图、极坐标和子图绘制
      愚人杯的RE题
      str.c_str() 补充C中没有string类型的问题
      加班整理出来的MySQL数据库基本操作送给大家,非常详细...
      02-线性结构3 Reversing Linked List
      九、Mysql - 错误日志 - 慢日志 - 通用日志 - 二进制日志 - undolog - redolog - 事务的执行过程
      ubuntu 22.04 服务器网卡无IP地址
      C++笔记之popen()和std_system()和std_async()执行系统命令比较
    19. 原文地址:https://blog.csdn.net/m0_61961937/article/details/126850192
      • 最新文章
      • 攻防演习之三天拿下官网站群
        数据安全治理学习——前期安全规划和安全管理体系建设
        企业安全 | 企业内一次钓鱼演练准备过程
        内网渗透测试 | Kerberos协议及其部分攻击手法
        0day的产生 | 不懂代码的"代码审计"
        安装scrcpy-client模块av模块异常,环境问题解决方案
        leetcode hot100【LeetCode 279. 完全平方数】java实现
        OpenWrt下安装Mosquitto
        AnatoMask论文汇总
        【AI日记】24.11.01 LangChain、openai api和github copilot
      • 热门文章
      • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
        奉劝各位学弟学妹们,该打造你的技术影响力了!
        五年了,我在 CSDN 的两个一百万。
        Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
        面试官都震惊,你这网络基础可以啊!
        你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
        心情不好的时候,用 Python 画棵樱花树送给自己吧
        通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
        13 万字 C 语言从入门到精通保姆级教程2021 年版
        10行代码集2000张美女图,Python爬虫120例,再上征途
      Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
      正则表达式工具 cron表达式工具 密码生成工具

      京公网安备 11010502049817号