序列化(python、java)
来源:互联网 发布:人格训练软件森 编辑:程序博客网 时间:2024/04/30 05:05
我们把变量从内存中变成可存储或传输的过程称之为序列化(对象转化为字节序列),其好处一是实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里);二是,利用序列化实现远程通信,即在网络上传送对象的字节序列。在Python中叫pickling;在Java中,只要一个类实现了java.io.Serializable接口,那么它就可以被序列化。
序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
Python提供了pickle模块来实现序列化。
import pickle
d = dict(name=’Bob’, age=20, score=88)
pickle.dumps(d)
b’\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x14X\x05\x00\x00\x00scoreq\x02KXX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00Bobq\x04u.’
pickle.dumps()方法把任意对象序列化成一个bytes,然后,就可以把这个bytes写入文件。或者用另一个方法pickle.dump()直接把对象序列化后写入一个file-like Object:
f = open(‘dump.txt’, ‘wb’)
pickle.dump(d, f)
f.close()
当我们要把对象从磁盘读到内存时,可以先把内容读到一个bytes,然后用pickle.loads()方法反序列化出对象,也可以直接用pickle.load()方法从一个file-like Object中直接反序列化出对象。我们打开另一个Python命令行来反序列化刚才保存的对象:
f = open(‘dump.txt’, ‘rb’)
d = pickle.load(f)
f.close()
d
{‘age’: 20, ‘score’: 88, ‘name’: ‘Bob’}
java:
Person类,实现了Serializable接口,它包含三个字段:name,String类型;age,Integer类型;gender,Gender类型。另外,还重写该类的toString()方法,以方便打印Person实例中的内容。
public class Person implements Serializable { private String name = null; private Integer age = null; private Gender gender = null; public Person() { System.out.println("none-arg constructor"); } public Person(String name, Integer age, Gender gender) { System.out.println("arg constructor"); this.name = name; this.age = age; this.gender = gender; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Gender getGender() { return gender; } public void setGender(Gender gender) { this.gender = gender; } @Override public String toString() { return "[" + name + ", " + age + ", " + gender + "]"; } }
public class SimpleSerial {
public static void main(String[] args) throws Exception { File file = new File("person.out"); ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream(file)); Person person = new Person("John", 101, Gender.MALE); oout.writeObject(person); //写入文件 oout.close(); ObjectInputStream oin = new ObjectInputStream(new FileInputStream(file)); Object newPerson = oin.readObject(); // 没有强制转换到Person类型 oin.close(); //读取对象 System.out.println(newPerson); } }
- 序列化(python、java)
- python 序列化对象
- 序列化Python对象
- python序列化操作
- 序列化Python对象
- 序列化Python对象
- Python JSON序列化
- 序列化-python
- python序列化pickle
- python序列化
- Python序列化
- python对象序列化
- Python之序列化
- Python 序列化
- python 序列化
- Python-----序列化
- Python-序列化
- Python序列化
- 计算累加和、累积和、日期的定义及其使用
- numpy ndarray 与 array
- WIN10下使用EasyBCD装Ubuntu双系统
- 2017年7月8日 阳光在新书发布会上的发言稿
- 函数属性 arguments
- 序列化(python、java)
- 数字方格
- itoa(整型转字符型)与atoi(字符转整型)
- js循环
- 深度学习在图像检索的应用
- 前端测试
- C++输出流名字重命名,代码重用
- 常用图像库整理
- 多级指针避免野指针