论坛
门户
内部优惠
喜欢
话题
VIP会员
搜索
新浪微博
登录
注册
100%
100%
首页
>
软件开发
>
java语言
>
Java_专题对象的序列化
回复
« 返回列表
zhoujufu
精灵王
注册日期
2011-07-25
发帖数
275
QQ
火币
390枚
粉丝
10
关注
4
加关注
写私信
打招呼
阅读:
4362
回复:
0
Java_专题对象的序列化
楼主
#
更多
只看楼主
倒序阅读
发布于:2013-08-23 11:54
保存
100%
100%
[]
1
对象的序列化:
目的:将一个具体的对象进行持久化,写入到硬盘上。
注意:静态数据不能被序列化
,因为静态数据不在堆
内存
中,是存储在静态方法区中。
如何将非静态的数据不进行序列化?
用
transient
关键字修饰此变量即可。
Serializable:
用
于启动对象的序列化功能,可以强制让指定类具备序列化功能,该接口中没有成员,这是一个标记接口。这个标记接口用于给序列化类提供UID。这个uid是依
据类中的成员的数字签名进行运行获取的。如果不需要自动获取一个uid,可以在类中,手动指定一个名称为serialVersionUID id号。依据
编译器的不同,或者对信息的高度敏感性。最好每一个序列化的类都进行手动显示的UID的指定。
import
java
.io.*;
class ObjectStre
amd
emo {
public static void main(String[] args) throws Exception{
writeObj();
readObj();
}
public static void readObj()throws Exception{
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.txt"));
Object obj = ois.readObject();
//读取一个对象。
System.out.println(obj.toString());
}
public static void writeObj()throws IOException{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.txt"));
oos.writeObject(new Person("lisi",25));
//写入一个对象。
oos.close();
}
}
class Person
implements Serializable
{
private static final long
serialVersionUID
= 42L;
private
transient
String name;
//用
transient
修饰后name将不会进行序列化
public int age;
Person(String name,int age){
this.name = name;
this.age = age;
}
public String toString(){
return name+"::"+age;
}
}
-----------------------------------------------------------------------------------------------
DataOutputStream
、
DataInputStream
:
专门用于操作基本数据类型数据的对象。
DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.txt"));
dos.writeInt(256);
dos.close();
DataInputStream dis = new DataInputStream(new FileInputStream("data.txt"));
int num = dis.readInt();
System.out.println(num);
dis.close();
-----------------------------------------------------------------------------------------------
ByteArrayInputStream:源:内存
ByteArrayOutputStream:目的:内存。
这两个流对象不涉及底层资源调用,操作的都是内存中数组,所以不需要关闭。
直接操作字节数组就可以了,为什么还要把数组封装到流对象中呢?因为数组本身没有方法,只有一个length属性。为了便于数组的操作,将数组进行封装,对外提供方法操作数组中的元素。
对于数组元素操作无非两种操作:设置(写)和获取(读),
而这两操作正好对应流的读写操作。这两个对象就是使用了流的读写思想来操作数组。
//创建源:
ByteArrayInputStream bis = new ByteArrayInputStream("abcdef".getBytes());
//创建目的:
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int ch = 0;
while((ch=bis.read())!=-1){
bos.write(ch);
}
System.out.println(bos.toString());
CharArrayReady CharArrayWrite :
与ByteArrayInputStream ByteArrayOutputStream相同,只不过只能读写一个字节而已。
StringReady StringReady
与ByteArrayInputStream ByteArrayOutputStream相同,只不过读写的都是字符串而已。
W
rite(int):将一个整数
的四个字节的最低字节写入目的地
P
rint(int):将一个整数的表现形式写入到目的地,写的是什么,到目的地就是什么
W
riteint(int):将一个整数的四个字节写入到目的地,保证数据字节的原样性。
喜欢
0
评分
0
最新喜欢:
SO 我拿流年 乱了浮生 SO
回复
100%
发帖
回复
« 返回列表
普通帖
您需要登录后才可以回帖,
登录
或者
注册
100%
返回顶部
关闭
最新喜欢