java kryo序列化与反序列化
https://blog.csdn.net/lan12334321234/article/details/84907492
问题:
https://blog.csdn.net/baidu_38404101/article/details/79103216
实用
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.codec.binary.Base64;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import com.esotericsoftware.kryo.serializers.CollectionSerializer;
import com.esotericsoftware.kryo.serializers.JavaSerializer;
public class KyroTest {
public static void main(String[] args) {
		List<Person> list = new ArrayList<Person>();
		Person p ;
		for(int i=0;i<=100000;i++){
			p = new Person();
			p.setId(i);
			list.add(p);
		}
		long begin = System.currentTimeMillis();
		String listStr = serializationList(list,Person.class);
		System.out.println(listStr.length());
		System.out.println(System.currentTimeMillis()-begin);
		begin = System.currentTimeMillis();
		deserializationList(listStr,Person.class);
		System.out.println(System.currentTimeMillis()-begin);
	}
	@SuppressWarnings("all")
	private static <T extends Serializable> String serializationList(List<T> obj, Class<T> clazz) {
		Kryo kryo = new Kryo();
		kryo.setReferences(false);
		kryo.setRegistrationRequired(true);
CollectionSerializer serializer = new CollectionSerializer();
		serializer.setElementClass(clazz, new JavaSerializer());
		serializer.setElementsCanBeNull(false);
kryo.register(clazz, new JavaSerializer());
		kryo.register(ArrayList.class, serializer);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
		Output output = new Output(baos);
		kryo.writeObject(output, obj);
		output.flush();
		output.close();
byte[] b = baos.toByteArray();
		try {
			baos.flush();
			baos.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return new String(new Base64().encode(b));
	}
@SuppressWarnings("all")
	private static <T extends Serializable> List<T> deserializationList(String obj, Class<T> clazz) {
		Kryo kryo = new Kryo();
		kryo.setReferences(false);
		kryo.setRegistrationRequired(true);
CollectionSerializer serializer = new CollectionSerializer();
		serializer.setElementClass(clazz, new JavaSerializer());
		serializer.setElementsCanBeNull(false);
kryo.register(clazz, new JavaSerializer());
		kryo.register(ArrayList.class, serializer);
ByteArrayInputStream bais = new ByteArrayInputStream(new Base64().decode(obj));
		Input input = new Input(bais);
		return (List<T>) kryo.readObject(input, ArrayList.class, serializer);
	}
/**
	 * 序列化对象
	 * 
	 * @param obj
	 * @return
	 */
	@SuppressWarnings("all")
	private static <T extends Serializable> String serializationObject(T obj) {
		Kryo kryo = new Kryo();
		kryo.setReferences(false);
		kryo.register(obj.getClass(), new JavaSerializer());
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		Output output = new Output(baos);
		kryo.writeClassAndObject(output, obj);
		output.flush();
		output.close();
		byte[] b = baos.toByteArray();
		try {
			baos.flush();
			baos.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
return new String(new Base64().encode(b));
	}
/**
	 * 反序列化
	 * 
	 * @param obj
	 * @param clazz
	 * @return
	 */
	@SuppressWarnings("all")
	private <T extends Serializable> T deserializationObject(String obj, Class<T> clazz) {
		Kryo kryo = new Kryo();
		kryo.setReferences(false);
		kryo.register(clazz, new JavaSerializer());
ByteArrayInputStream bais = new ByteArrayInputStream(new Base64().decode(obj));
		Input input = new Input(bais);
		return (T) kryo.readClassAndObject(input);
	}
}
class Person implements Serializable{
private static final long serialVersionUID = 1L;
	private int id ;
public int getId() {
		return id;
	}
public void setId(int id) {
		this.id = id;
	}
}
--------------------- 
作者:艾伦蓝 
来源:CSDN 
原文:https://blog.csdn.net/lan12334321234/article/details/84907492 
版权声明:本文为博主原创文章,转载请附上博文链接!
java kryo序列化与反序列化的更多相关文章
- java 对象序列化与反序列化
		Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为 ... 
- Java对象序列化与反序列化一 JSON
		Java对象序列化与反序列化一 JSON 1. 依赖库 jackson-all-1.6.1.jar 2. 代码 public class Student { private String nam ... 
- Java对象序列化和反序列化的工具方法
		import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ... 
- Java之序列化和反序列化
		序列化的对象: package test_demo.SerializableOper; import java.io.Serializable; /* * 序列化对象需要实现序列号接口 * */ pu ... 
- java之序列化与反序列化
		1.这里主要是介绍Protobuf提供的序列化与反序列化的高效性.相对于传统的java提供的序列化来说,Protobuf的效率提高了很多倍.但是也有不足的地方,就是proto在对象序列化的时候抛弃了很 ... 
- Java基础—序列化与反序列化(转载)
		转载自: Java序列化与反序列化 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 2.为什么需要序列化 ... 
- Java 中序列化与反序列化
		一. 序列化和反序列化概念 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.将程序中的对象,放入文 ... 
- JAVA的序列化与反序列化
		一.为什么要进行序列化 再介绍之前,我们有必要先了解下对象的生命周期,我们知道Java对象的生命周期,也即Java中的远程方法调用RMI也会被用到,在网络中要传输对象的话,则必须要对对象进行序列化,关 ... 
- 深入分析Java的序列化与反序列化
		序列化是一种对象持久化的手段.普遍应用在网络传输.RMI等场景中.本文通过分析ArrayList的序列化来介绍Java序列化的相关内容.主要涉及到以下几个问题: 怎么实现Java的序列化 为什么实现了 ... 
随机推荐
- Chrome之谷歌插件开发
			最近碰到一个需求,需要在某个平台上批量的添加好友,如果是人工点击,可以操作,但是效率并不高,人工成本较高.就打算使用浏览器插件的方式来完成这件重复性的工作. 介绍: Chrome插件的本质就是一个由 ... 
- tf.get_variable函数的使用
			tf.get_variable(name, shape, initializer): name就是变量的名称,shape是变量的维度,initializer是变量初始化的方式,初始化的方式有以下几种 ... 
- nginx.conf   laravel 配置
			server { listen 443; server_name www.liuhuanguang.cn; #填写绑定证书的域名 ssl on; ssl_certificate cert/1_www. ... 
- Fuel9.0部署
			一.安装环境(准备工作): 1. 所需物理主机的要求如下 内存:8GB+,推荐16GB:(少于8GB的就免谈了) 磁盘:500GB+: 物理机OS:ubuntu-desktop-amd64 14.04 ... 
- java数据结构复习02
			1.递归问题 1.1汉诺塔问题(递归) 问题描述三个柱子,起初有若干个按大小关系顺序安放的盘子,需要全部移动到另外一个柱子上.移动规则:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘.移动 ... 
- docker安装配置mongodb
			1 执行 docker search mongo 命令: 2 运行mongo docker run --name mongo -v /mnt/mongodb:/data/db -p 27017:270 ... 
- [uboot] (第一章)uboot流程——概述(转)
			版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/ooonebook/article/det ... 
- jQuery $.ajax传递数组的traditional参数传递必须true 对象的序列化
			数组类型参数传递: 若一个请求中包含多个值,如:(test.action?tid=1&tid=2&tid=3),参数都是同一个,只是指定多个值,这样请求时后台会发生解析错误,应先使用 ... 
- 怎么画一条0.5px的边
			编者按:本文由人人网FED发表于掘金,并已授权奇舞周刊转载 什么是像素? 像素是屏幕显示最小的单位,在一个1080p的屏幕上,它的像素数量是1920 1080,即横边有1920个像素,而竖边为1080 ... 
- Eclipse/MyEclipse超全常用快捷键汇总,绝对实用
			[MyEclipse CI 2019.4.0安装包下载] Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键. 常用快捷 ... 
