关于Serializable接口 网上的说明看不太懂 求各位 给个通俗解释 最好有例子~~撒分~
解决方案 »
- 在JAVA中,不用API中的函数,如何将String类型的转换成int类型数据,急急急!
- 请高手指教一下
- 如何点击一个菜单的选项的按钮。出项一个需要用户填写信息的窗口啊 ??可以示范吗?谢谢啊 ,首先要一个菜单的程序还要一个菜单项的按钮,再次弹出一个窗口啊 ?谢谢啊
- 统计出字符字母出现的次数, 并以字母顺序输出并带上统计数量
- 遇到这样的JAVA问题,在线等.
- 急用!修改程序使结果排序后输出。经调试成功 后,给分,不成功 ,不给分.
- 求助:如何替换“[]”字符?
- osworkflow采用什么开源协议,如果我们用有什么限制吗?
- 一个很重要的问题!
- Java tcp ip协议多次通讯出问题了
- 一道面试题 求解答
- PreparedStatement的executeBatch()方法为什么执行不过去
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class TestPerson {
public static void main(String[] args) {
writeObjectToFile(new Person("张三", 20), "c:\\person.data");
Person p = readObjectFromFile("c:\\person.data");
System.out.println(p);
ArrayList<Person> persons = new ArrayList<Person>();
persons.add(new Person("李四", 21));
persons.add(new Person("王五", 22));
writeCollectionToFile(persons,"c:/persons");
ArrayList<Person> temppersons = (ArrayList<Person>) readCollectionFromFile("c:/persons");
for(int i=0; i<temppersons.size(); i++){
System.out.println(temppersons.get(i));
}
} ///////////////////////////////////////////////////////////////////////////////////////////////////////// private static <T> void writeObjectToFile(T t, String fileName) {// 将一个对象 写入文件
if (t == null)
return;// 空对象默认不写进去
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream(fileName));
oos.writeObject(t);
oos.flush();
oos.writeObject(null);// //写入结束标志方便读取(如果不写入,在读取的时候无法定位读取结束);
oos.flush();
} catch (Exception e) {
} finally {
try {
if (oos != null)
oos.close();
} catch (Exception e) {
}
}
} private static <T> T readObjectFromFile(String fileName) {// 从文件中读出一个对象
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream(fileName));
T t = (T) ois.readObject();
return t; } catch (Exception e) {
} finally {
try {
if (ois != null)
ois.close();
} catch (Exception e) {
}
}
return null;
} /////////////////////////////////////////////////////////////////////////////////////////////////////
private static <T> void writeCollectionToFile(Collection<T> collection,
String fileName) {// 将集合中的对象 写入文件
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream(fileName));
Iterator<T> iterator = collection.iterator();
while (iterator.hasNext()) {
T t = (T) iterator.next();
oos.writeObject(t);
oos.flush();
}
oos.writeObject(null);// //写入结束标志方便读取(如果不写入,在读取的时候无法定位读取结束);
oos.flush();
} catch (Exception e) {
} finally {
try {
if (oos != null)
oos.close();
} catch (Exception e) {
}
}
} private static <T> Collection readCollectionFromFile(String fileName) {// 从文件中读取对象
// 返回一个集合
ObjectInputStream ois = null;
Collection<T> collection = new ArrayList<T>();
try {
ois = new ObjectInputStream(new FileInputStream(fileName));
Object tempObject = null;
T t = null;
while ((tempObject = ois.readObject()) != null) {
t = (T) tempObject;
collection.add(t);
}
return collection;
} catch (Exception e) {
} finally {
try {
if (ois != null)
ois.close();
} catch (Exception e) {
}
}
return null;
}}class Person implements Serializable {
private static final long serialVersionUID = 6213933727640755594L;
private String name;
private int id; Person(String n, int i) {
name = n;
id = i;
} public String getName() {
return name;
} public int getId() {
return id;
} public String toString() {
return "name:" + name + " id:" + id;
}
}/*output:
name:张三 id:20
name:李四 id:21
name:王五 id:22
*/
(把下面的Externalizable 改为 Serializable 也照常运行,但它们适用的环境不同)
package myio;
import java.io.Externalizable;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.util.Date;public class TestExternalizable {
/**
* 序列化对象到文件
* @param fileName
*/
public static void serialize(String fileName){
try {
ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(fileName));
SE s1,s2,s3;
s1=new SE("lori",Gender.Male,27);
s2=new SE("winter",Gender.Male,21);
s3=new SE("super",Gender.Female,25);
out.writeObject(s1);
out.writeObject(s2);
out.writeObject(s3);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 从文件反序列化到对象
* @param fileName
*/
public static void deserialize(String fileName){
SE []se=new SE[3];
try {
ObjectInputStream in=new ObjectInputStream(new FileInputStream(fileName));
se[0]=(SE)(in.readObject());
se[1]=(SE)(in.readObject());
se[2]=(SE)(in.readObject());
for (int i = 0; i < se.length; i++) {
System.out.println(se[i].toString());
}
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
//序列化对象
TestExternalizable.serialize("D:\\SE.txt");
System.out.println("序列化完毕");
//反序列化对象
TestExternalizable.deserialize("D:\\SE.txt");
System.out.println("反序列化完毕");
}
}class SE implements Externalizable{
private String name;
private Gender gender;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public SE(String name, Gender gender, int age) {
super();
this.name = name;
this.gender = gender;
this.age = age;
}
public SE() {
super();
}
//当反序列化对象时,该方法自动调用
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
System.out.println("反序列化方法执行。");
Date d=(Date)in.readObject();
System.out.println(d);
this.setName(in.readObject().toString());
this.setGender((Gender)in.readObject());
//this.setAge((int)(in.readObject()));//写错了
this.setAge((Integer)in.readObject());
}
//当序列化对象时,该方法自动调用
public void writeExternal(ObjectOutput out) throws IOException {
System.out.println("序列化方法执行。");
Date d=new Date();
System.out.println(d);
out.writeObject(d);
out.writeObject(this.getName());//注意name和geneder的顺序
out.writeObject(this.getGender());
out.writeObject(this.getAge());
}
@Override
public String toString() {
return "年龄: " + age + "名字: "+name+"性别: "+gender;
}
}
enum Gender{
Female,Male
}