자바 대상 의 직렬 화 와 역 직렬 화: 기본 형식 및 JSON 형식 (jackson 사용)

13637 단어 Jackson
나의 기술 블 로 그 는 자주 깡패 사이트 에 의 해 악의 적 으로 퍼 져 나 간다.원문 으로 이동 하 십시오:http://www.cnblogs.com/hamhog/p/3558663.html가지런 한 레이아웃, 효과 적 인 링크, 정확 한 코드 들 여 쓰기, 더 좋 은 읽 기 체험 을 즐 깁 니 다.
[기본 형식]
public class MyClass implements Serializable{

...}

직렬 화:
ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(outputPath)); 
output.writeObject(myObject);

역 직렬 화:
ObjectInputStream input = new ObjectInputStream(new FileInputStream(inputPath)); 

return (MyClass)input.readObject();

[JSON 포맷]
잭 슨 가방 사용.잭 슨 은 효율 이 매우 높 은 자바 JSON 가방 이다.문서 와 다운로드 참조 홈 페이지.
직렬 화:
ObjectMapper mapper = new ObjectMapper();

mapper.writeValue(new File(outputPath), myObject);

역 직렬 화:
return mapper.readValue(new File(outputPath), MyClass.class);

[전체 테스트 코드]
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<String> animals;



    public Zoo() {

        animals = new ArrayList<String>();

    }

    

    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: 
animals: " + animals.toString() + "
maxAnimalCount: " + maxAnimalCount + "
"; } /** * 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:
" + zoo1); System.out.println("zoo2:
" + zoo2); //Serialize to JSON zoo1.serializeJSONToLog("zoo1.json"); zoo1 = Zoo.deserializeJSONFromLog("zoo1.json"); System.out.println("zoo1 from json:
" + zoo1); } }

기본 serialize 는 private 의 속성 을 정렬 하고 정적 속성 을 정렬 하지 않 습 니 다.잭 슨 은 비 Public 의 속성 과 정적 속성 을 정렬 하지 않 습 니 다.

좋은 웹페이지 즐겨찾기