clumsy birds 写道
Student的封装类
package org.tarena.day03;
import java.io.Serializable;
@SuppressWarnings("serial")
public class Student implements Serializable{
//使对象序列化;
private int id;
private String name;
private char sex;
private /*transient*/int age;//transient 只能用来修饰属性。表示这个属性在对象序列化时将被忽略。
/* transient int num;
表示当我们对属性序列化时忽略这个属性(即忽略不使之持久化)。
所有属性必须都是可序列化的,特别是当有些属性本身也是对象的时候,要尤其注意这一点。
*/
public Student(int id, String name, char sex, int age) {
super();
this.setId(id);
this.setName(name);
this.setSex(sex);
this.setAge(age);
}
public Student() {
super();
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
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;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
@Override
public boolean equals(Object obj) {
if(obj == null) return false;
if (obj instanceof Student) {
Student stu = (Student) obj;
return stu.name.equals(this.name)&&(stu.id+"").equals(this.id);
}
return false;
}
@Override
public String toString() {
return id+","+name.toString()+","+sex+","+age;
}
}
clumsy birds 写道
测试实现
package org.tarena.day03;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
//对象序列化;
public class StudentTest {
static void setStudent(File fl,Student stu) throws Exception{
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream(fl));
out.writeObject(stu);
out.close();
out.flush();
}
static void getStudent(File fl) throws Exception{
ObjectInputStream in = new ObjectInputStream(
new FileInputStream(fl));
Student stu = (Student)in.readObject();
System.out.println(stu);
}
public static void main(String[] args) throws Exception{
Student stu = new Student(1,"张三",'男',23);
File fl = new File("/home/soft22/Desktop/abc.txt");
setStudent(fl,stu);
getStudent(fl);
}
}
clumsy birds 写道
运行结果:1,张三,男,23
clumsy birds 写道
对 象 流 读 取 结 束 返 回 E O F Exception 异 常 对象
一个类中有其他类型的对象,那么,这个类实现了 Serializable 接口,在对象序列化时,也同样要求这个类
中属性都能够对象序列化(基本类型除外)。
注意:对于对象流的操作,在写对象时要一次写入完毕,如果使用追加模式写入,只会读取到上一次写入的
对象,使用对象流写入时,会先写入一个头部,然后写入数据,最后加上结束符号,如果使用追加方式写入
的话,那就会在结束符号继续向下写入,但是在读取时只会读到结束符为止,以后再次写入的数据就会丢失。
注意:在使用对象流写入对象时要一次向文件写入,不能够采用追加方式。
serialver 命令判断是否一个属性或对象可序列化,
serialver TestObject(TestObject 必须为已经编译,也就是.class)
执行结果:如果不可序列化;则出现不可序列化的提示。如果可以序列化,那么就会出现序列化的 ID:UID。
Externalizable 这是 Serializable 的子接口,他可以让用户自定义如何序列化对象。
readExternal(ObjectInput in),writeExternal(ObjectOutput out)这是这个接口中的两个方法,通过这两个方法可以定制序列化过程。这个方法不安全,可以调用以上两个方法改变对象的状态。
transient 只能用来修饰属性。表示这个属性在对象序列化时将被忽略。
transient int num;
表示当我们对属性序列化时忽略这个属性(即忽略不使之持久化)。所有属性必须都是可序列化的,特别是当有些属性本身也是对象的时候,要尤其注意这一点。
java.util.StringTokenizer 类,这个类是用于字符串截取的。
StringTokenizer(参数 1,参数 2)按某种符号隔开文件
StringTokenizer(s,”:”) 用“:”隔开字符,s 为对象。
补充:字节流结束返回-1,字符流结束返回 null,对象流结束返回 EOFException
引申---------〉异常经常被用在流程控制, 异常也是方法的一种返回形式。
分享到:
相关推荐
这是Java序列化标准规范,对于研究序列化源码能够提供指导作用,为深入研究Java序列技术奠定基础。
极好的序列化与发序列化代码。可以处理array集合,数组或者单个对象等的序列化与反序列化。
NULL 博文链接:https://pxchen.iteye.com/blog/701552
Java中的序列化机制有两种实现方式: 一种是实现Serializable接口 另一种是实现Externalizable接口 区别: 实现Serializable接口 1 系统自动储存必要的信息 2 Java内建支持,易于实现,只需实现该接口即可,无须任何...
通过实现 Serializable 接口,Java对象可以被序列化和反序列化。序列化可以将对象转换为字节流,以便于存储或传输。反序列化则可以将字节流重新转换为原始对象。需要注意的是,序列化和反序列化的类必须具有相同的 ...
NULL 博文链接:https://zhangguanzhong.iteye.com/blog/803917
ProtoBuf的介绍以及在Java中使用protobuf将对象进行序列化与反序列化示例代码.rar
Kryo 是一个快速高效的Java对象图形序列化框架,主要特点是性能、高效和易用。该项目用来序列化对象到文件、数据库或者网络。示例代码:Kryo kryo = new Kryo(); // ... Output output = new Output(new...
使用 XStream 不用任何映射就能实现多数 Java 对象的序列化。在生成的 XML 中对象名变成了元素名,类中的字符串组成了 XML 中的元素内容。使用 XStream 序列化的类不需要实现 Serializable 接口。XStream 是一种序列...
NULL 博文链接:https://bbxyhaihua.iteye.com/blog/448340
主要介绍了java IO数据操作流、对象序列化、压缩流代码解析,具有一定借鉴价值,需要的朋友可以参考下
NULL 博文链接:https://snowdymy.iteye.com/blog/949379
kryo中间件实例,内容:使用kryo使java对象object序列化成字符串,并使之反序列化为对象。 一个完整的工程,可使用eclipse导入,可运行DemoMain查看结果,有注释 资源包括依赖的kryo-2.24.0.jar、minlog-1.2.jar、...
——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!
最近阅读Serializable接口和Externalizable接口的源码,并结合了一些资料,对面试过程中与序列化相关的内容做了一些总结。 一、序列化、反序列化、使用场景、意义。 序列化:将对象写入IO流中; 反序列化:从IO流中...
NULL 博文链接:https://zxf-noimp.iteye.com/blog/1125401
主要给大家介绍了关于java中对象的序列化与反序列化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了java对象序列化与反序列化原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Netty中使用java序列化做的demo,请运行代码中的SubReqServer和SubReqClient的Main函数即可