随着网络技术的发展,越来越多的应用需要在不同的平台之间进行数据交换,而Java中的序列化和反序列化技术可以很好地解决这个问题。
序列化是指将对象转换为字节序列的过程,反序列化则是将字节序列转换为对象的过程。
在Java中,可以通过实现Serializable接口来实现序列化和反序列化。例如:
public class Person implements Serializable { private String name; private int age; // 省略构造方法和getter/setter }
在进行序列化和反序列化时,需要使用ObjectOutputStream和ObjectInputStream类。例如:
// 序列化 Person person = new Person("Tom", 18); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(person); byte[] bytes = bos.toByteArray(); oos.close(); bos.close(); // 反序列化 ByteArrayInputStream bis = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bis); Person person2 = (Person)ois.readObject(); ois.close(); bis.close();
JSON是一种轻量级的数据交换格式,具有可读性、易于解析等特点。在Java中,可以使用Jackson、Gson等库实现JSON序列化和反序列化。
例如,使用Jackson库进行JSON序列化:
ObjectMapper mapper = new ObjectMapper(); String jsonStr = mapper.writeValueAsString(person);
使用Jackson库进行JSON反序列化:
Person person2 = mapper.readValue(jsonStr, Person.class);
XML是一种标记语言,具有结构化、可扩展、可读性好等特点。在Java中,可以使用JAXB、XStream等库实现XML序列化和反序列化。
例如,使用JAXB库进行XML序列化:
JAXBContext context = JAXBContext.newInstance(Person.class); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(person, System.out);
使用JAXB库进行XML反序列化:
Unmarshaller unmarshaller = context.createUnmarshaller(); Person person2 = (Person)unmarshaller.unmarshal(new StringReader(xmlStr));
Protocol Buffers是一种轻量级的数据交换格式,具有高效、可扩展等特点。在Java中,可以使用Google的protobuf库实现Protocol Buffers序列化和反序列化。
例如,定义proto文件:
syntax = "proto3"; message Person { string name = 1; int32 age = 2; }
生成Java代码:
protoc --java_out=./ Person.proto
使用protobuf库进行序列化:
PersonProto.Person.Builder builder = PersonProto.Person.newBuilder(); builder.setName("Tom"); builder.setAge(18); PersonProto.Person person = builder.build(); byte[] bytes = person.toByteArray();
使用protobuf库进行反序列化:
PersonProto.Person person2 = PersonProto.Person.parseFrom(bytes); String name = person2.getName(); int age = person2.getAge();
以上就是Java中的序列化和反序列化,以及常用的JSON序列化、XML序列化、Protocol Buffers技术的介绍。
本文为翻滚的胖子原创文章,转载无需和我联系,但请注明来自猿教程iskeys.com