容易忽视但是功能灰常强大的Java API(二. 读写对象)
2011-07-01 10:47
204 查看
二. 读写对象
有时候你会遇到这样的情况:从数据集合中读取数据,解析数据,然后封装成对象,再把对象放到一个集合中,对集合对象进行操作,程序结束。第二次需要运行程序时,又按如上的操作流程做一遍。第三次,每四次…每一次都执行相同的操作。又或者会遇到这样的情况:程序运行过程中会产生一些对象的集合,我们只对这个对象集合感兴趣,而对它是如何生成的不感兴趣。程序结束后第二次你又需要这个对象集合时,又要重新生成这个对象集合。
当你遇到这样的情况时,你有没有想过这样可能会造成系统资源的浪费,会影响功能实现的效率,那你有没有考虑过一个更好的做法来解决这个问题。事实上,这个问题可以通过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两个类也可以读写复杂的数据对象,但是前提是所涉及的集合及对象都是可序列化的。
有时候你会遇到这样的情况:从数据集合中读取数据,解析数据,然后封装成对象,再把对象放到一个集合中,对集合对象进行操作,程序结束。第二次需要运行程序时,又按如上的操作流程做一遍。第三次,每四次…每一次都执行相同的操作。又或者会遇到这样的情况:程序运行过程中会产生一些对象的集合,我们只对这个对象集合感兴趣,而对它是如何生成的不感兴趣。程序结束后第二次你又需要这个对象集合时,又要重新生成这个对象集合。
当你遇到这样的情况时,你有没有想过这样可能会造成系统资源的浪费,会影响功能实现的效率,那你有没有考虑过一个更好的做法来解决这个问题。事实上,这个问题可以通过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两个类也可以读写复杂的数据对象,但是前提是所涉及的集合及对象都是可序列化的。
相关文章推荐
- 容易忽视但是功能灰常强大的Java API
- 容易忽视但是功能灰常强大的Java API
- 容易忽视但功能能非常强大的javaAPI
- 容易忽视但是功能灰常强大的Java API(一、排序)
- 容易忽视但是功能灰常强大的Java API(三. 集合运算)
- 容易忽视但是功能灰常强大的Java API(四. 排序的集合)
- 容易忽视但是功能灰常强大的Java API(五. 二分查找)
- JAVA面向对象API————List的特有功能
- java使用淘宝API读写json实现手机归属地查询功能代码
- hdu5050 Divided Land(二进制最大公约数+java强大的读写功能)
- Java核心基础之容易被忽视的细节问题——异常处理
- JAVA常用API或编程工具003--实现pdf在线阅读功能之pdf.js
- 在 Java2中,有一套设计优良的接口和类组成了Java集合框架Collection,使程序员操作成批的数据或对象元素极为方便。这些接口和类有很多对抽象数据类型操作的API,而这是我们常用的且在数据结
- Java语言中容易被人忽视的细节
- JavaEE JDBC 读写LOB大对象
- 15-06-常用对象API(String类-常见功能-判断)
- 16-集合框架-02-常用对象API(集合框架-体系&共性功能)
- Java API 解析读写XML
- JAVA学习第三十课(经常使用对象API)- String类:类方法练习
- java的反射技术功能十分强大,整理一些资料!!