java json 对象序列化_java对象序列化与反序列化的默认格式和json格式使用示例

该博客展示了如何使用Java实现对象的序列化与反序列化,包括标准序列化和Jackson库进行JSON转换。代码示例中创建了一个Zoo类,实现了Serializable接口,并提供了添加动物、设置最大动物数量、保存到文件以及从文件恢复的方法。通过main方法展示了序列化和反序列化的流程。
摘要由CSDN通过智能技术生成

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

import java.util.ArrayList;

import com.fasterxml.jackson.core.JsonGenerationException;

import com.fasterxml.jackson.core.JsonParseException;

import com.fasterxml.jackson.databind.JsonMappingException;

import com.fasterxml.jackson.databind.ObjectMapper;

public class Zoo implements Serializable {

private static final long serialVersionUID = 1L;

private static ObjectMapper mapper = new ObjectMapper();

public static int maxAnimalCount;

public ArrayList animals;

public Zoo() {

animals = new ArrayList();

}

public static void setMax(int max){

maxAnimalCount = max;

}

/**

* Add an animal to animals Array.

* @param animalName

*/

public void addAnimal(String animalName){

if (animals.size() < maxAnimalCount)

animals.add(animalName);

}

@Override

public String toString(){

return "Zoo: \n animals: " + animals.toString() +

"\n maxAnimalCount: " + maxAnimalCount + "\n";

}

/**

* Output standard serialization to file at logPath.

* @param logPath

*/

public void serializeToLog(String logPath) {

ObjectOutputStream output = null;

try

{

output = new ObjectOutputStream(

new FileOutputStream(logPath));

output.writeObject(this);

} catch(Exception e) {

e.printStackTrace();

} finally {

try {

output.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* Output JSON serialization(using jackson) to file at logPath.

* @param logPath

*/

public void serializeJSONToLog(String logPath){

try {

mapper.writeValue(new File(logPath), this);

} catch (JsonGenerationException e) {

e.printStackTrace();

} catch (JsonMappingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* Standard deserialize a Zoo instance from file at logPath.

* @param logPath

* @return deserialized zoo instance

*/

public static Zoo deserializeFromLog(String logPath) {

ObjectInputStream input = null;

try

{

input =new ObjectInputStream(

new FileInputStream(logPath));

return (Zoo)input.readObject();

} catch(Exception e) {

e.printStackTrace();

} finally {

try {

input.close();

} catch (IOException e) {

e.printStackTrace();

}

}

return null;

}

/**

* JSON deserialize a Zoo instance from file at logPath.

* @param logPath

* @return JSON deserialized zoo instance

*/

public static Zoo deserializeJSONFromLog(String logPath){

try {

return mapper.readValue(new File(logPath), Zoo.class);

} catch (JsonParseException e) {

e.printStackTrace();

} catch (JsonMappingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

}

class ZooSerializeTest {

public static void main(String[] args) {

Zoo zoo1 = new Zoo();

Zoo.setMax(100);

zoo1.addAnimal("hamster");

zoo1.addAnimal("sheep");

zoo1.serializeToLog("zoo1.log");

Zoo zoo2 = new Zoo();

Zoo.setMax(200);

zoo2.addAnimal("tiger");

zoo2.serializeToLog("zoo2.log");

Zoo.setMax(300);

//Deserialization

zoo1 = Zoo.deserializeFromLog("zoo1.log");

zoo2 = Zoo.deserializeFromLog("zoo2.log");

System.out.println("zoo1: \n" + zoo1);

System.out.println("zoo2: \n" + zoo2);

//Serialize to JSON

zoo1.serializeJSONToLog("zoo1.json");

zoo1 = Zoo.deserializeJSONFromLog("zoo1.json");

System.out.println("zoo1 from json: \n" + zoo1);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值