Java、C#使用二进制序列化、反序列化操作数据
在Java和C#中,我们可以使用二进制序列化和反序列化来存储和读取对象数据。二进制序列化就是将对象转化为二进制字节流的过程,反序列化则是将二进制字节流转化为对象的过程。在网络传输或者本地存储中,使用二进制序列化和反序列化可以方便的进行数据传输和存储。
Java操作示例
序列化
使用Java中的ObjectOutputStream可以将对象转化为二进制字节流。例如,我们定义一个Student类:
import java.io.Serializable;
public class Student implements Serializable {
private String name;
private int age;
private String hobby;
public Student(String name, int age, String hobby) {
this.name = name;
this.age = age;
this.hobby = hobby;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getHobby() {
return hobby;
}
}
我们可以将一个Student对象序列化为二进制字节流:
import java.io.*;
public class SerializationDemo {
public static void main(String[] args) throws IOException {
Student student = new Student("Jack", 18, "Swimming");
FileOutputStream fos = new FileOutputStream("student.bin");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(student);
oos.close();
}
}
反序列化
使用Java中的ObjectInputStream可以将二进制字节流转化为对象。例如,我们将上面序列化的二进制字节流反序列化为一个Student对象:
import java.io.*;
public class DeserializationDemo {
public static void main(String[] args) throws IOException, ClassNotFoundException {
FileInputStream fis = new FileInputStream("student.bin");
ObjectInputStream ois = new ObjectInputStream(fis);
Student student = (Student) ois.readObject();
ois.close();
System.out.println(student.getName());
System.out.println(student.getAge());
System.out.println(student.getHobby());
}
}
C#操作示例
序列化
使用C#中的BinaryFormatter可以将对象转化为二进制字节流。例如,我们定义一个Student类:
[Serializable]
public class Student {
public string Name { get; set; }
public int Age { get; set; }
public string Hobby { get; set; }
public Student(string name, int age, string hobby) {
this.Name = name;
this.Age = age;
this.Hobby = hobby;
}
}
我们可以将一个Student对象序列化为二进制字节流:
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
class SerializationDemo {
static void Main(string[] args) {
Student student = new Student("Jack", 18, "Swimming");
MemoryStream stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, student);
}
}
反序列化
使用C#中的BinaryFormatter可以将二进制字节流转化为对象。例如,我们将上面序列化的二进制字节流反序列化为一个Student对象:
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
class DeserializationDemo {
static void Main(string[] args) {
MemoryStream stream = ...; // 上面序列化的MemoryStream
BinaryFormatter formatter = new BinaryFormatter();
stream.Seek(0, SeekOrigin.Begin);
Student student = (Student) formatter.Deserialize(stream);
Console.WriteLine(student.Name);
Console.WriteLine(student.Age);
Console.WriteLine(student.Hobby);
}
}
注意事项
- 序列化的对象必须实现Serializable接口(Java)或标记[Serializable]属性(C#)。
- 序列化和反序列化的过程中,需要使用相同的序列化器。因此,序列化后的二进制字节流需要同时保存序列化器的一些元数据,以便反序列化时使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java,C#使用二进制序列化、反序列化操作数据 - Python技术站