zoukankan      html  css  js  c++  java
  • Java序列化与反序列化

    一、概念:

      1、Java序列化:把Java对象转换为字节序列的过程

      2、Java反序列化:将字节序列恢复为Java对象的过程

    二、用途:

      1、想要将Java对象从内存中保存到一个文件中或者数据库中时候

      2、想要将Java对象在网络上传递的时候

      3、通过序列化在进程间传递对象

    Serializable序列化接口属于java.io下的类,所以序列化存储或者序列化传递的是一个字节流。

    三、实现:

      
    package com.sigma.sigmacore.utils;
    
    import com.fasterxml.jackson.core.type.TypeReference;
    import com.fasterxml.jackson.databind.DeserializationFeature;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.type.TypeFactory;
    
    import java.io.IOException;
    import java.io.StringWriter;
    import java.io.Writer;
    
    import static com.google.common.base.Preconditions.checkNotNull;
    
    public class JsonUtils {
        private static ObjectMapper objectMapper = new ObjectMapper();
    
        //父类的静态变量->父类的静态初始化块->子类的静态变量->子类的静态初始化块
        static {
            //默認忽略位置屬性
            objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        }
    
        public static ObjectMapper getMapper() {
            return objectMapper;
        }
    
        /**
         * 將對象序列化為JSON
         *
         * @param object 對象
         * @return json字符串
         * @throws IOException IO異常(包含JSON異常)
         */
        public static String serialize(Object object) throws IOException {
            return serialize(object, false);
        }
    
        /**
         * 將對象序列化為JSON
         *
         * @param object     對象
         * @param withPretty 是否格式化
         * @return json字符串
         * @throws IOException IO異常(包含JSON異常)
         */
        public static String serialize(Object object, boolean withPretty) throws IOException {
            Writer write = new StringWriter();
            if (withPretty) {
                objectMapper.writerWithDefaultPrettyPrinter().writeValue(write, object);
            } else {
                objectMapper.writeValue(write, object);
            }
    
            return write.toString();
        }
    
        /**
         * 將對象序列化為JSON
         *
         * @param objectMapper 自配置對象
         * @param object       對象
         * @param withPretty   是否格式化
         * @return Json字符串
         * @throws IOException IO異常
         */
        public static String serialize(ObjectMapper objectMapper, Object object, boolean withPretty) throws IOException {
            Writer write = new StringWriter();
            if (withPretty) {
                objectMapper.writerWithDefaultPrettyPrinter().writeValue(write, object);
            } else {
                objectMapper.writeValue(write, object);
            }
    
            return write.toString();
        }
    
        /**
         * 反序列化為T
         *
         * @param json      json字符串
         * @param classType 類別
         * @param <T>       泛型
         * @return 對象
         * @throws IOException IO異常(包括JSON異常)
         */
        public static <T> T deserialize(String json, Class<T> classType) throws IOException {
            checkNotNull(json);
            return (T) objectMapper.readValue(json, TypeFactory.rawClass(classType));
        }
    
    
        /**
         * 反序列化為T
         *
         * @param json    json字符串
         * @param typeRef 類別
         * @param <T>     泛型
         * @return 對象
         * @throws IOException IO異常(包括JSON異常)
         */
        public static <T> T deserialize(String json, TypeReference<T> typeRef) throws IOException {
            return objectMapper.readValue(json, typeRef);
        }
    
        /**
         * 反序列化為T
         *
         * @param objectMapper 自配置Mapper
         * @param json         json字符串
         * @param typeRef      類型
         * @param <T>          泛型
         * @return 對象
         * @throws IOException IO異常(包括JSON異常)
         */
        public static <T> T deserialize(ObjectMapper objectMapper, String json, TypeReference<T> typeRef) throws IOException {
            return objectMapper.readValue(json, typeRef);
        }
    }
     
  • 相关阅读:
    codesmith 模板
    asp.net 开发知识小结【转】
    一种页面数据错误输入提示方法 【转】
    vs2008 调试js
    安装vs2008出现的问题
    Godaddy主机导入MSSQL数据库教程
    asp.net用url重写URLReWriter实现任意二级域名(续)
    Visio2007 与Microsoft Studio 2008不兼容
    dos 必知八项命令
    Godaddy空间设置说明
  • 原文地址:https://www.cnblogs.com/javallh/p/10237525.html
Copyright © 2011-2022 走看看