序列化工具

2023-11-16

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * 序列化,反序列化工具
 * 
 * @project iweixin-pay
 * @fileName SerializeUtil.java
 * @Description
 * @author light-zhang
 * @date 2018年5月31日上午9:51:25
 * @version 1.0.0
 */
public class SerializeUtil {

    public static byte[] serialize(Object object) {
        ObjectOutputStream oos = null;
        ByteArrayOutputStream baos = null;
        try {
            // 序列化
            baos = new ByteArrayOutputStream();
            oos = new ObjectOutputStream(baos);
            oos.writeObject(object);
            byte[] bytes = baos.toByteArray();
            return bytes;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            close(oos);
            close(baos);
        }
        return null;
    }

    public static Object unserialize(byte[] bytes) {
        ByteArrayInputStream bais = null;
        ObjectInputStream ois = null;
        try {
            // 反序列化
            bais = new ByteArrayInputStream(bytes);
            ois = new ObjectInputStream(bais);
            return ois.readObject();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            close(bais);
            close(ois);
        }
        return null;
    }

    /**
     * 序列化 list 集合
     * 
     * @param list
     * @return
     */
    public static byte[] serializeList(List<?> list) {

        if (list == null || list.size() <= 0) {
            return null;
        }
        ObjectOutputStream oos = null;
        ByteArrayOutputStream baos = null;
        byte[] bytes = null;
        try {
            baos = new ByteArrayOutputStream();
            oos = new ObjectOutputStream(baos);
            for (Object obj : list) {
                oos.writeObject(obj);
            }
            bytes = baos.toByteArray();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            close(oos);
            close(baos);
        }
        return bytes;
    }

    /**
     * 反序列化 list 集合
     * 
     * @param lb
     * @return
     */
    public static List<?> unserializeList(byte[] bytes) {
        if (bytes == null) {
            return null;
        }

        List<Object> list = new ArrayList<Object>();
        ByteArrayInputStream bais = null;
        ObjectInputStream ois = null;
        try {
            // 反序列化
            bais = new ByteArrayInputStream(bytes);
            ois = new ObjectInputStream(bais);
            while (bais.available() > 0) {
                Object obj = (Object) ois.readObject();
                if (obj == null) {
                    break;
                }
                list.add(obj);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            close(bais);
            close(ois);
        }
        return list;
    }

    /**
     * 关闭io流对象
     * 
     * @param closeable
     */
    public static void close(Closeable closeable) {
        if (closeable != null) {
            try {
                closeable.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

序列化工具 的相关文章

  • 多服务环境下定时任务重复执行问题解决方案

    当一个服务部署在多台服务器上时 定时任务可能出现多次执行的情况 就是每个服务上执行一次 有以下两种思路 一是固定死只有某服务器执行定时任务 二是随机暂停几秒 某一服务执行了 其他就不再执行 1 固定某一个服务器作为执行定时任务的机器 通过配
  • Android序列化:Serializable Parcelable

    Android序列化完全解析 一 Java Serializable http http www jianshu com p fcc59fb523b6 Android序列化完全解析 二 Parcelable http www jianshu
  • C++ 结构体转json

    FdogSerialize FdogSerialize是一个用于C 序列化的开源库 采用非入侵方式 无需在原有结构体上进行修改 目前支持基础类型 基础类型数组 结构体 以及vector list map等数据类型的序列化 支持JSON和XM
  • 读取文件最后N行

    转自 http www zuidaima com share 1550463669226496 htm 指定行数 可以获取到从这行到文件尾的所有行 分享自大熊 源文件 读取最后10行结果 代码下载地址 http www zuidaima c
  • 手把手教你调用百度人脸识别API

    在百度AI开放平台使用百度的人脸识别能力 只需要三个核心步骤即可操作完成 获取接口权限 准备接口调用工具 进行接口调用 全部流程走通只需要十分钟时间 获取接口权限 获取接口权限是调用接口的前提 主要分为以下几步 1 进入百度云的人脸识别控制
  • java什么时候需要用序列化?

    文章目录 一 Java序列化概述 二 什么时候用序列化 三 项目创建很多对象怎么优化 场景 优化思路一 加条件判断 优化思路二 使用clone浅拷贝 一 Java序列化概述 简单说就是为了保存在内存中的各种对象的状态 也就是实例变量 不是方
  • 使用XStream实现Java对象与XML互相转换(不断更新中)

    添加pom依赖
  • StrSubstitutor和StrUtil占位符字符串替换

    目录 一 commons lang包下的StrSubstitutor 1 使用场景一 2 使用场景二 二 hutoo包下的StrUtil 1 使用场景一 2 使用场景二 3 使用场景三 三 原生的三种方式 一 commons lang包下的
  • HBuilder html 乱码解决,java eclipse等应当同理

    1 网上下载了一套html代码 出现乱码 一般就是编码格式问题 2 解决方式 更改编码 3 剪切所有内容 然后右下角修改编码为utf 8 4 再粘贴内容 5 访问页面
  • centos安装docker后,ping不能服务器ip

    工作中碰的问题 记录下解决过程 问题描述 2台内网服务器 A 172 20 72 77 和B 172 17 3 222 在A服务上ping B 安装 docker之前是可以ping通 安装docker之后确ping不通了 查找原因 在安装d
  • RedisTemplate lettuce 实现分布式锁

    springboot2 x 以上使用redis时 默认使用了lettuce封装 比起jedis线程安全 import lombok extern slf4j Slf4j import org springframework data red
  • java 直接读取zip文件和文件内容

    不解压zip文件 直接读取zip包内的文件夹以及文件内容 zip包内内容 代码如下 import java io import java nio charset Charset import java util zip ZipEntry i
  • 序列化工具

    import java io ByteArrayInputStream import java io ByteArrayOutputStream import java io Closeable import java io ObjectI
  • APP的接口版本管理 实现多版本共存

    思路 用户请求url gt 拦截器拦截 gt 转发到真正处理类和方法 gt 返回结果 url注解类 package com jc app util apiVersion import java lang annotation 需要拦截的AP
  • httpclient工具类

    import java io IOException import java net URI import java util ArrayList import java util List import java util Map imp
  • excel转换pdf方法 (aspose.cells亲测有效)

    AsposeUtils java package com lmp test utils import com aspose cells License import com aspose cells PdfSaveOptions impor
  • Java写入txt文件内容

    Java写入数据进txt文件 需求 多条数据追加进文件 且需要处理中文编码问题 以下代码只能处理向文件添加数据的功能 但是会覆盖掉之前的数据 import java io File import java io FileOutputStre
  • JSONUtil.toJsonStr 时间变成了时间戳

    问题描述 我的接口是以Date来接收日期的 然后我在拿到这个对象参数后 通过hutool当中的JSONUtil toJsonStr将其序列化成json字符串 然后存储到数据库 然后存储到数据库当中发现这个字段是时间戳 DateTimeFor
  • easyExcel实战:(五)写Excel设置excel的样式

    一 主要是设置Excel的字体大小和颜色 目前还不支持单元格内容居中和自动适应宽度 定义Excel正文背景颜色 TableStyle tableStyle new TableStyle tableStyle setTableContentB
  • 【git教程】

    目录 git与SVN的区别 集中式与分布式的区别 Windows上安装Git 创建版本库 仓库 repository 将文件添加到repository 报错处理 查看仓库的状态 版本回退 工作区和暂存区 管理

随机推荐

  • win10-未知的USB设备-解决自己问题的记录

    若是没有解决你的问题 再找找其他办法看看 我也是网上搜的 刚好解决了我的问题我就记录了一下而已 哈哈哈 原文链接 修复 未知的USB设备 设备描述符请求失败 在Windows 10中 1 设备管理器 gt 通用串行总线控制器 gt 未知US
  • 基于opencv的手势识别

    大家好 我是一名本科生 我的主要学习方向是计算机视觉以及人工智能 按照目前的学习进度来说 我就是一小白 在这里写下自己编写的程序 与大家分享 记录一下自己的成长 今天与大家分享的是基于OpenCv的手势识别 思路分析 获取图片 在图片中找到
  • unity添加多个相机渲染物体多个视角的图片

    添加相机 我渲染物体多视角的图片是要用到cave空间 所以添加了四个相机 并且都放在空物体下面 还有两个物体 用在cave空间要保证四个相机的位置一致 rotation互成90 前 0 0 0 右 0 90 0 左 0 270 0 下 90
  • 用matplotlib动画功能,一帧一帧的录制排序算法

    1 matplotlib绘制动画 matplotlib是python中最经典的绘图包 里面animation模块能绘制动画 首先导入小例子使用的模块 from matplotlib import pyplot as plt from mat
  • 高性能MySQL:创建高性能索引

    文章目录 前言 一 索引的语法 1 1 创建索引 1 2 删除索引 1 3 查看索引 1 4 查看查询语句使用索引的情况 二 索引的优缺点 2 1 索引的优点 2 2 索引的缺点 三 索引的类型 3 1 按照功能逻辑区分 3 2 按照数据结
  • BH1750简单介绍

    bh1750是16位数字输出型 环境光强度传感器集成电路 主要应用有移动电话 液晶电视 笔记本电脑 便携式游戏机 数码相机 数码摄像机 汽车定位系统 液晶显示器 目录 1 bh1750中文资料 2 bh1750引脚说明 3 bh1750传感
  • 算法入门 24. TSP问题(状态压缩DP)

    TSP问题 问题描述如下 假设有一个旅行商人要拜访n个城市 他必须选择所要走的路径 路径的限制是每个城市只能拜访一次 而且最后要回到原来出发的城市 路径的选择目标是要求得的路径路程为所有路径之中的最小值 include
  • warning: #940-D: missing return statement at end of non-void function “fgetc“解决方案

    问题描述 warning 940 D missing return statement at end of non void function fgetc 解决方案 解决措施 引入头文件stdio h
  • 前端面试知识点整理——项目整理

    前端面试知识点整理 项目整理 文章目录 一 华工线上黑市 安卓 二 二手闲置商场 健身管理系统 小程序 三 birthday app swift 四 给Joey的生日页面 移动端 五 开发者博客 vue 一 华工线上黑市 安卓 1 MVP架
  • npm install 离线安装

    将外网装好的npm 将其缓存拷到内网 再通过缓存文件安装 注意内外网的nodejs npm版本要一致 不一致要 将其卸载 重装成一致的 卸载时 看 usr local lib usr local include usr local bin
  • HardFault_Handler问题查找方法

    一 程序进入HardFault Handler 可能原因 1 内存溢出 常见的于数组访问越界 2 堆栈溢出 堆栈设置过小等 二 排查方法 方法1 出现该情况后 可首先查看LR寄存器中的值 确定当前使用堆栈为MSP或PSP 1 打开寄存器窗口
  • asm:常用语法

    常用语法 1 循环 1 1 使用条件跳转指令实现循环 1 2 使用LOOP指令实现循环 2 字符串 2 1 指定字符串的长度 2 2 字符串指令 2 3 重复前缀 3 数组 4 递归 5 宏 6 文件操作 7 内存管理 1 循环 1 1 使
  • 2023年美赛五大热点问题(赛前准备、报名、选题、评审、查询)全面解读!

    思路 永久更新 全网最新最全 持续更新中 查看最下方QQ群获取 2023年美赛五大热点问题全面解读 赛前准备 报名 选题 评审 查询 一 赛前准备 硬实力准备 1 学习常用模型 算法 并进行实战建模练习 学习常用模型的原理 并分别进行应用练
  • 应用层——域名系统DNS

    认识DNS 我们平常在访问某个网站的时候不使用IP地址 而是使用一串有罗马字和点号组成的字符串 而一般用户在使用TCP IP进行通信的时候也不实用IP地址 能够这样做是因为有了DNS Domain Name System 功能的支持 DNS
  • 在Ubuntu 18.04 中设置开机自动执行脚本

    Ubuntu18 04 不能像16 04 那样可以直接使用 etc rc local 文件 需要设置 1 建立 rc local service 文件 sudo vim etc systemd system rc local service
  • 【Vue2.0源码学习】实例方法篇-生命周期相关方法

    文章目录 0 前言 1 vm mount 1 1 用法回顾 1 2 内部原理 2 vm forceUpdate 2 1 用法回顾 2 2 内部原理 3 vm nextTick 3 1 用法回顾 3 2 JS的运行机制 3 3 内部原理 能力
  • 时空猎人服务器维护中是什么意思,时空猎人玩家自助FAQ问题汇总新手必备

    玩家自助FAQ问题汇总新手必备 你总能碰到各种各样的游戏问题 或机型问题 这里整理了一个常见问题解决办法 FAQ 可以帮忙大家 一 运行时程序异常退出建议玩家按照以下方式处理 1 清理缓存 关闭空闲软件 再次登录游戏 2 如果问题反复出现建
  • java8_02_stream(一)创建流和中间操作

    Stream 主要分为三部分 1 创建流 2 中间操作 3 终止操作 一 创建流的四种方法 Collection系列集合的stream parallelStream 方法 Stream stringStream list stream Ar
  • 在 ASP.NET Core 应用程序启动时运行代码的 3 种方法

    开发人员应该将初始化内存缓存的代码放在哪里 开发人员可能会发现有必要在 ASP NET Core 应用程序启动时只执行一次代码 例如 开发人员可能需要填充内存缓存 运行后台任务 从某些外部源读取配置 发布应用程序成功启动的事件等 ASP N
  • 序列化工具

    import java io ByteArrayInputStream import java io ByteArrayOutputStream import java io Closeable import java io ObjectI