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---序列化与反序列化的更多相关文章

  1. C# 序列化与反序列化几种格式的转换

    这里介绍了几种方式之间的序列化与反序列化之间的转换 首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象; 第一种将object转换为string对象,这种比较简单没 ...

  2. 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)

    在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...

  3. Java 序列化与反序列化

    1.什么是序列化?为什么要序列化? Java 序列化就是指将对象转换为字节序列的过程,而反序列化则是只将字节序列转换成目标对象的过程. 我们都知道,在进行浏览器访问的时候,我们看到的文本.图片.音频. ...

  4. C#中怎样实现序列化和反序列化

    我们想要将数据进行持久化的操作的话,也就是将数据写入到文件中,我们在C#中可以通过IO流来操作,同时也可以通过序列化来操作,本人是比较推荐使用序列化操作的 因为我们如果想要将一个对象持久化到文件中 如 ...

  5. Java序列化与反序列化

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

  6. XPatchLib 对象增量数据序列化及反序列化器 For .Net

    在日常的软件开发和使用过程中,我们发现同一套系统的同一配置项在不同的客户环境中是存在各种各样的差异的.在差异较为分散时,如何较好的管理这些差异,使得维护过程能够更加安全和快速,一直在这样那样的困扰着开 ...

  7. c# Json 自定义类作为字典键时,序列化和反序列化的处理方法

    一般情况下,Newtonsoft.Json.dll 对 Dictionary<int,object>.Dictionary<string,object>等序列化与反序列化都是成 ...

  8. java 对象序列化与反序列化

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

  9. 序列化,反序列化和transient关键字

    一.序列化和反序列化的概念 序列化:指把java对象转换为字节序列的过程. 反序列化:指把字节序列恢复为java对象的过程. 对象的序列化主要有两种用途: 1) 把对象的字节序列保存到硬盘上,通常存放 ...

  10. C#对象序列化与反序列化zz

      C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍........................ ...

随机推荐

  1. 剑指 offer set 19 翻转单词顺序 && 字符串左旋

    题目 1. 翻转单词 student. a am I 转换成 I am a student. 2. 字符串左旋 abba 1 转成 bbaa 总结 1. 先对每个单词旋转, 再整齐旋转 2. 先翻转一 ...

  2. windows系统添加服务命令

    管理员身份进入cmd sc create TestSvr binPath= D:\Program Files\test.exe start= auto

  3. 构建API

    前言 过程,如图: 第一步创建一个帮助类,类里面提供了加密.组装Url等方法,代码如下: using System; using System.Collections.Generic; using S ...

  4. Linuxyum源切换阿里云软件源

    备份本机软件源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下载新的CentOS-Bas ...

  5. Groovy基本句法

    Groovy基本句法 Gradle作为一个构建工具自然不会自己去创造一门语言来支撑自己,那么它用的是哪门子语言呢?什么语言能写成这样: task hello { doLast { println 'H ...

  6. Android中可自由移动悬浮窗口的实现

    http://www.xsmile.net/?p=538   调用WindowManager,并设置WindowManager.LayoutParams的相关属性,通过WindowManager的ad ...

  7. Netty进行RPC服务器的开发 需要考虑的问题

    谈谈如何使用Netty开发实现高性能的RPC服务器 - Newland - 博客园 http://www.cnblogs.com/jietang/p/5615681.html 如何实现.基于什么原理? ...

  8. order meeting room - 离散度30min

    w <meta charset="UTF-8"> <?php include('conn.php'); include('w_fun.php'); include ...

  9. C#中字符数组,字节数组和string之间的转化

    转自:http://blog.csdn.net/wangxiaoqin00007/article/details/17675419 NDC(NetworkDiskClient)的界面和后台程序之间用S ...

  10. appium+python自动化测试真机测试时报错“info: [debug] Error: Could not extract PIDs from ps output. PIDS: [], Procs: ["bad pid 'uiautomator'"]”

    刚开始启动服务时,弹出授权提示,以为是手机app权限问题,后来debug后,发现了一个警告日志:UiAutomator did not shut down fast enough, calling i ...