二. 读写对象

有时候你会遇到这样的情况:从数据集合中读取数据,解析数据,然后封装成对象,再把对象放到一个集合中,对集合对象进行操作,程序结束。第二次需要运行程序时,又按如上的操作流程做一遍。第三次,每四次…每一次都执行相同的操作。又或者会遇到这样的情况:程序运行过程中会产生一些对象的集合,我们只对这个对象集合感兴趣,而对它是如何生成的不感兴趣。程序结束后第二次你又需要这个对象集合时,又要重新生成这个对象集合。

当你遇到这样的情况时,你有没有想过这样可能会造成系统资源的浪费,会影响功能实现的效率,那你有没有考虑过一个更好的做法来解决这个问题。事实上,这个问题可以通过java提供的实现对象读写的两个类来解决,它们是ObjectInputStream和ObjectOutputStream。通过这两个类可以非常方便的实现将对象以序列化的格式写入到文件或者是从文件读取序列化的数据来直接生成对象,这两个类操作的对象必须是可以序列化的。因此,可以利用这两个类来保存中间结果到文件中,当需要时再从文件中直接读取出中间结果,这样可以在一定程度上提高程序功能的实现效率。下面是一个例子:

public class ObjectIOStreamTest implements Serializable {    
    public static void main(String[] args) throws Exception {     
        ObjectIOStreamTest test = new ObjectIOStreamTest();     
        Set num = new HashSet();     
        num.add(test.new Student(1, "a"));     
        num.add(test.new Student(2, "b"));     
        num.add(test.new Student(3, "c"));     
       FileOutputStream fos = new FileOutputStream("test");        
        ObjectOutputStream oos = new ObjectOutputStream(fos);         
        oos.writeObject(num);

FileInputStream fis = new FileInputStream("test");        
        ObjectInputStream ois = new ObjectInputStream(fis);         
        Set num2 = new HashSet();         
        num2 = (Set) ois.readObject();         
        Iterator it = num2.iterator();     
        while (it.hasNext()) {     
            Student stu = it.next();     
            System.out.println(stu.getId() + " " + stu.getName());     
        }     
    }

public class Student implements Serializable {    
        private int id;     
        private String name;

public Student(int id, String name) {    
            this.id = id;     
            this.name = name;     
        }

public int getId() {    
            return id;     
        }

public void setId(int id) {    
            this.id = id;     
        }

public String getName() {    
            return name;     
        }

public void setName(String name) {    
            this.name = name;     
        }     
    }     
}

测试结果:

2 b    
3 c     
1 a

感兴趣的读者可以看看生成的test文件,它是以二进制的格式来保存对象的,其中也保存了集合的类型和对象的类型。另外要说明的是,ObjectInputStream和ObjectOutputStream两个类也可以读写复杂的数据对象,但是前提是所涉及的集合及对象都是可序列化的。

转载于:https://www.cnblogs.com/happy200318/archive/2011/07/01/2095314.html

容易忽视但是功能灰常强大的Java API(二. 读写对象)相关推荐

  1. 容易忽视但是功能灰常强大的Java API(五. 二分查找)

    五. 二分查找 二分查找是一个高效的查找算法,在java的集合对象中也提供了二分查找的算法,如下面的java api接口: java.util.Arrays.binarySearch(java.lan ...

  2. t00ls提供Mysql sha1彩虹表(灰常强大)

    介绍: mysql sha1 a. 1 -- 11位 数字 b. 1 --  8位  小写字母 c. 1  --  8位  小写字母 +  数字 d. 1 --  7位   字母 + 数字 + 符号 ...

  3. 灰常牛逼的命令行备忘录 navi

    灰常牛逼的命令行备忘录 navi 1. navi命令简介 1.1 navi命令简介 命令行是非常高效的工具,但一个很常见的现象是,很多命令行过一段时间就容易忘.举个栗子,如果我们常用 git 命令行管 ...

  4. 华为手机8.0.0怎么找到云相册_华为G9怎么找到云相册_失而复得 华为“查找手机”功能有多强大?快来了解一下......

    [手机中国新闻]人生有三大幸事:虚惊一尝久别重逢.失而复得.手机作为我们日常生活中不可或缺的重要工具,几乎是每个人每天的必备品.但每天在全世界都有千千万万人,因为种种原因,将他们的手机丢失.由于手机是 ...

  5. TopCoder 详细规则入门(灰常实用)

    TopCoder 详细规则入门(灰常实用) 基本规则 TopCoder的比赛类型很多,最常见的是周赛SRM(Single Round Match),另外还有TCHS SRM(TopCoder High ...

  6. freemarker常见语法大全,灰常有用!

    由于公司前端使用的技术是freemarker,于是没事就在网上看看别人写的关于freemarker的文章,感觉freemarker灰常简单,比jsp好用,jsp太乱太臃肿了,另外推荐大家看看freem ...

  7. php在线编辑器_8款功能强大的Java编辑器,建议收藏!「渡一教育」

    作为一名合格的程序员,每天打交道最多的除了手机,恐怕就是编辑器了,需要花费大量的时间投身于代码的海洋中,使用各种不同的IDE来开发代码. 对于程序员们来说,一款好用的编辑器,需要像自己的左右手一样.一 ...

  8. java字节码编辑工具_2200 Star!功能强大的 Java 字节码编辑器!

    [导语]:Recaf是一款功能十分强大的Java字节码编辑器,基于objectweb的ASM构建,可以更好地显示文件的属性,并为字节码编辑提供方便. 简介 Recaf是一个易于使用的现代的Java字节 ...

  9. 雷丁CAN通讯信号上位机,比德文,宝路达,看通讯报文,查故障,灰常方便实用

    雷丁CAN通讯信号上位机,比德文,宝路达,看通讯报文,查故障,灰常方便实用. 本CAN上位机,适用雷丁通用can协议国标报文.轻松读取CAN报文,且界面清晰,数据流一目了然,修车好帮手. 专用数据插头 ...

最新文章

  1. 为ubuntu操作系统增加root用户
  2. 并发和并行的区别_多核、多处理器、并发、并行、超线程概念总结
  3. 【BZOJ2625】[Neerc2009]Inspection 最小流
  4. 《原神》三测:在内购抽卡的商业模式上诞生的开放游戏世界
  5. Leetcode690.Employee Importance员工的重要性
  6. java string 返回匹配正则的字符串的起始位置_【Python】正则表达式
  7. 微软强行安装Firefox扩展程序
  8. 50道编程小题目之【企业利润提成】
  9. C++多线程编程 (1)
  10. java 中张孝祥老师_谁有传智博客张孝祥老师的Java视频——必须是完整的
  11. LeetCode 526. Beautiful Arrangement
  12. [leetcode] Sudoku Solver
  13. 可靠性测试审查checklist
  14. t分布f分布与样本均值抽样分布_T检验和其他假设检验的P值怎么理解
  15. AHU 数据结构 最短路径 安大地图版本
  16. m4s格式转换mp3_mp3文件怎么转换格式
  17. 第一章 语言处理与python
  18. 求解1+1/2+1/3+...1/99+1/100的和
  19. WPS如何转换成图片?三种方法帮你实现
  20. Laravel防范xss攻击

热门文章

  1. cad lisp 法兰6_南昌平板法兰加工设备_山东平安数控机械有限公司
  2. springboot打成jar包,在windows上运行出现乱码
  3. 网页嵌套:一个html嵌套到另一个html中
  4. Eclipse中修改SVN地址
  5. JUnit-4.12使用报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误
  6. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(3)签到题3题
  7. 【CCCC】L3-018 森森美图 (30分),计算几何+判断三点共线+bfs最短路
  8. cie规定的标准光源_孩视宝:健康自然的光源是护眼灯发展的重点
  9. p70_域名解析系统DNS
  10. 51nod-1093:骆驼和香蕉