netty6---序列化与反序列化
- package com.cn;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.util.Arrays;
- public class Test1 {
- public static void main(String[] args) throws IOException {
- int id = 101; //把id转换为字节数据,一个int占4个字节,
- int age = 21;
- //int转换为字节数组
- ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
- arrayOutputStream.write(int2bytes(id));
- arrayOutputStream.write(int2bytes(age));
- byte[] byteArray = arrayOutputStream.toByteArray();//[0, 0, 0, 101, 0, 0, 0, 21]
- System.out.println(Arrays.toString(byteArray));
- //字节数组转换为int
- ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(byteArray);
- byte[] idBytes = new byte[4];//id占4个字节
- arrayInputStream.read(idBytes);
- System.out.println("id:" + bytes2int(idBytes));//id:101
- byte[] ageBytes = new byte[4];
- arrayInputStream.read(ageBytes);//age占4个字节
- System.out.println("age:" + bytes2int(ageBytes));//age:21
- }
- /**
- int转换成字节数组,使用的是大端序列方式。
- 2种方式:
- 1.大端字节序列:先写高位,再写低位
- 2.小端字节序列:先写低位,再写高位
- */
- public static byte[] int2bytes(int i){
- byte[] bytes = new byte[4]; //int占4个字节
- bytes[0] = (byte)(i >> 3*8);//先获取高位,总共4个字节,向右移动3个字节,一个字节8位,
- bytes[1] = (byte)(i >> 2*8);
- bytes[2] = (byte)(i >> 1*8);
- bytes[3] = (byte)(i >> 0*8);
- return bytes;//[0, 0, 0, 101],[0, 0, 0, 21]
- }
- /**
- * 把字节数组转换为int。
- * int转换为字节数组时候bytes[0]是高位,向左移动3个字节,
- *
- * 大端序列方式:
- */
- public static int bytes2int(byte[] bytes){
- return (bytes[0] << 3*8) |
- (bytes[1] << 2*8) |
- (bytes[2] << 1*8) |
- (bytes[3] << 0*8);
- }
- }
- package com.cn;
- import java.nio.ByteBuffer;
- import java.util.Arrays;
- public class Test2 {
- public static void main(String[] args) {
- int id = 101;
- int age = 21;
- //序列化
- //nio里面的ByteBuffer,申请8个空间,必须给定指定的大小,不会自动扩容。再写数据就会报错超出容量。
- ByteBuffer buffer = ByteBuffer.allocate(8);
- buffer.putInt(id);
- buffer.putInt(age);
- byte[] array = buffer.array();
- System.out.println(Arrays.toString(buffer.array()));//[0, 0, 0, 101, 0, 0, 0, 21]
- //反序列化
- ByteBuffer buffer2 = ByteBuffer.wrap(array);
- System.out.println("id:"+buffer2.getInt());//先写的是id
- System.out.println("age:"+buffer2.getInt());//后写的是age
- //id:101,age:21
- }
- }
- package com.cn;
- import java.util.Arrays;
- import org.jboss.netty.buffer.ChannelBuffer;
- import org.jboss.netty.buffer.ChannelBuffers;
- public class Test3 {
- public static void main(String[] args) {
- //netty里面的ChannelBuffer,封装了ByteBuffer,可以自动扩容。
- ChannelBuffer buffer = ChannelBuffers.dynamicBuffer();
- buffer.writeInt(101);
- buffer.writeDouble(80.1);
- byte[] bytes = new byte[buffer.writerIndex()];//大小根据ChannelBuffer的写指针决定。
- buffer.readBytes(bytes);
- System.out.println(Arrays.toString(bytes));//[0, 0, 0, 101, 64, 84, 6, 102, 102, 102, 102, 102]
- System.out.println("abc".getBytes());//[B@29453f44
- //
- ChannelBuffer wrappedBuffer = ChannelBuffers.wrappedBuffer(bytes);//传一个字节数组
- System.out.println(wrappedBuffer.readInt());
- System.out.println(wrappedBuffer.readDouble());
- }
- }
netty6---序列化与反序列化的更多相关文章
- C# 序列化与反序列化几种格式的转换
这里介绍了几种方式之间的序列化与反序列化之间的转换 首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象; 第一种将object转换为string对象,这种比较简单没 ...
- 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)
在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...
- Java 序列化与反序列化
1.什么是序列化?为什么要序列化? Java 序列化就是指将对象转换为字节序列的过程,而反序列化则是只将字节序列转换成目标对象的过程. 我们都知道,在进行浏览器访问的时候,我们看到的文本.图片.音频. ...
- C#中怎样实现序列化和反序列化
我们想要将数据进行持久化的操作的话,也就是将数据写入到文件中,我们在C#中可以通过IO流来操作,同时也可以通过序列化来操作,本人是比较推荐使用序列化操作的 因为我们如果想要将一个对象持久化到文件中 如 ...
- Java序列化与反序列化
Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...
- XPatchLib 对象增量数据序列化及反序列化器 For .Net
在日常的软件开发和使用过程中,我们发现同一套系统的同一配置项在不同的客户环境中是存在各种各样的差异的.在差异较为分散时,如何较好的管理这些差异,使得维护过程能够更加安全和快速,一直在这样那样的困扰着开 ...
- c# Json 自定义类作为字典键时,序列化和反序列化的处理方法
一般情况下,Newtonsoft.Json.dll 对 Dictionary<int,object>.Dictionary<string,object>等序列化与反序列化都是成 ...
- java 对象序列化与反序列化
Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为 ...
- 序列化,反序列化和transient关键字
一.序列化和反序列化的概念 序列化:指把java对象转换为字节序列的过程. 反序列化:指把字节序列恢复为java对象的过程. 对象的序列化主要有两种用途: 1) 把对象的字节序列保存到硬盘上,通常存放 ...
- C#对象序列化与反序列化zz
C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍........................ ...
随机推荐
- Lua中 MinXmlHttpRequest如何发送post方式数据
local xhr=cc.XMLHttpRequest:new() xhr.responseType=cc.XMLHTTPREQUEST_RESPONSE_JSON xhr:open(“POST”,& ...
- jquery与javescript的区别(一)
一.找元素: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&g ...
- HDU1080(DP)
我用的dp是n^3的, dp[i][j] 表示在s串的i个前和t串的j个前,s[i],t[j]为最末端的两个串得到的最大值. 状态转移方程为: 之前将s和t串最尾端添加'-' ;i<=n;i++ ...
- HDU 5306 Gorgeous Sequence[线段树区间最值操作]
Gorgeous Sequence Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- 关于PostgreSQL的SQL注入必知必会
一.postgresql简介 postgresql是一款关系型数据库,广泛应用在web编程当中,由于其语法与MySQL不尽相同,所以其SQL注入又自成一派. 二.postgresql的SQL注入:(注 ...
- Django学习笔记第五篇--实战练习一--查询数据库并操作cookie
一.启动项目: django-admin start mysite1 cd mysite1 python manage.py startapp loginapp 根据上文敲命令就可以创建好了一个项目结 ...
- Java进阶SQL函数、网页定时刷新与自定义JSTL函数
一.SQL函数 能够在SQL语句中调用的函数(方法) ,用来实现一些小功能 聚合函数 能够把多行数据聚合成一个值(统计) count() 计数,计算数据条数 max() 计算最大值 m ...
- HQL的检索方式
HQL是面向持久化类的,所以需要查询表的字段都要用持久化类指定例如 String hql = "SELECT e.email, e.salary, e.dept FROM Employee ...
- kubernetes使用中遇到的坑
随着kubernetes的发展现在使用的范围越来越广,在使用过程中碰到问题是避免不了的,有些时候一些坑能提前避免是最好的,下面我做一个小记录,把我们生产环境中遇到的坑总结下,方便后面查询同时也方便各位 ...
- CSS 中 BEM命名方式
BEM的意思就是块(block).元素(element).修饰符(modifier),是一种CSS Class 命名方法. 类似于: .block{} .block__element{} .block ...