java 序列化 redis_java序列化与反序列化操作redis

笔者在使用SSM框架项目部分功能进行测试需要使用到对象的序列化与反序列化

第一种方式:jackson

Demo

package com.dznfit.service;

import com.dznfit.controller.LoginController;

import com.dznfit.entity.User;

import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.ObjectMapper;

import javaConfiguration.RootConfig;

import javaConfiguration.WebConfig;

import org.apache.log4j.Logger;

import org.junit.Test;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import the_mass.redis.SerializeUtil;

import java.io.IOException;

import java.util.ArrayList;

public class UserServiceImplTest {

private static Logger logger = Logger.getLogger(UserServiceImplTest.class);

@Test

public void login() throws IOException {

User user = new User(1, "dz", "123", 1);

//放入容器

AnnotationConfigApplicationContext context =

new AnnotationConfigApplicationContext(RootConfig.class);

//得到bean

UserServiceImpl bean = context.getBean(UserServiceImpl.class);

/**

* ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中实现。

*/

ObjectMapper mapper = new ObjectMapper();

System.out.println("类名" + bean.login((user)).getClass().getName());

String s = mapper.writeValueAsString(bean.login(user));

System.out.println("序列化:" + s);

System.out.println("反序列化:" + mapper.readValue(s, User.class));

}

}

结果:

64418b2f8c9ef9f8e91ebd6266f30bce.png

我们可以看到jackson实现类

ObjectMapper有许多方法

序列化时给个Object对象就可以了转成json字符串

反序列化也是有很多

80ad4149877f9f45af5303b61a92b1ce.png

第二种使用java自带序列化

需要在实体类实现 implements Serializable接口

@Test

public void Serialization() throws IOException, ClassNotFoundException {

Jedis jedis = new Jedis();

//java原生序列化

ByteArrayOutputStream stream = new ByteArrayOutputStream();

ObjectOutputStream oos = new ObjectOutputStream(stream);

oos.writeObject(new News(1, "sdj", "merry christmas"));

oos.writeObject(new News(2, "zdm", "mashangyaoofangjiale"));

jedis.set("news-01".getBytes(), stream.toByteArray());

oos.close();

System.out.println("---------");

System.out.println(jedis.get("news-01").getBytes().length);

System.out.println(jedis.get("news-01".getBytes()).length);

//反序列化

//这里有一个坑在调用jedis.get("news-01").getBytes() --error

// 这样调用的话会改变字节码取的时候就不对了

//存jedis.set("news-01".getBytes())取所有也是jedis.get("news-01".getBytes());

ByteArrayInputStream bri = new ByteArrayInputStream(jedis.get("news-01".getBytes()));

ObjectInputStream outs = new ObjectInputStream(bri);

Object o = outs.readObject();

Object o1 = outs.readObject();

System.out.println(o);

System.out.println(o1);

outs.close();

}

结果

3fc259f98f2e8623ed1415ccbc95cd1a.png

java对象序列化和反序列化,redis存入和获取对象

最近使用redis发现直接存储序列化后的对象更方便,现提供java序列化和反序列化的代码 1.序列化代码: public static byte[] serialize(Object object) ...

java浅克隆和深克隆,序列化和反序列化实现深克隆(封装序列化和反序列化操作)

本篇博客内容: 一.浅克隆(ShallowClone)和深克隆(DeepClone) 二.序列化和反序列化实现深克隆 三.封装序列化和反序列化操作 ObjectOutputStream + 内存流By ...

Java基础(五)-Java序列化与反序列化

.output_wrapper pre code { font-family: Consolas, Inconsolata, Courier, monospace; display: block !i ...

Java序列化和反序列化,你该知道得更多

序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象的状态,重新 ...

java序列化和反序列化中的serialVersionUID有啥用

1.什么是序列化和反序列化 序列化就是将java对象转成字节序列的过程:反序列化就是将字节序列转成java对象的过程. java中,序列化的目的一种是需要将对象保存到硬盘上,一种是对象需要在网络中传 ...

(记录)Jedis存放对象和读取对象--Java序列化与反序列化

一.理论分析 在学习Redis中的Jedis这一部分的时候,要使用到Protostuff(Protobuf的Java客户端)这一序列化工具.一开始看到序列化这些字眼的时候,感觉到一头雾水.于是,参考了 ...

Java 序列化和反序列化(三)Serializable 源码分析 - 2

目录 Java 序列化和反序列化(三)Serializable 源码分析 - 2 1. ObjectStreamField 1.1 数据结构 1.2 构造函数 2. ObjectStreamClass ...

Java 序列化和反序列化(二)Serializable 源码分析 - 1

目录 Java 序列化和反序列化(二)Serializable 源码分析 - 1 1. Java 序列化接口 2. ObjectOutputStream 源码分析 2.1 ObjectOutputSt ...

Java序列化与反序列化

Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...

随机推荐

JavaScript学习笔记4之 ByClass&json

一.通过class获取标签 var out=document.getElementsByClassName(‘out’);IE 6 7 8 不支持 getElementsName 是否有办法既能通过c ...

第6章 DOM节点操作

一.创建节点 为了使页面更加智能化,有时我们想动态的在 html 结构页面添加一个元素标签,那么 在插入之前首先要做的动作就是:创建节点. varbox=$('

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值