`
yutiansky
  • 浏览: 199000 次
  • 性别: Icon_minigender_1
  • 来自: 本溪
社区版块
存档分类
最新评论

(java入门)BASE64 & 序列化

阅读更多

结论:序列化比BASE64消耗多

package net.tianyu.sample;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

import org.apache.commons.codec.binary.Base64;

public class TestSerialize implements Serializable {

	private static final long serialVersionUID = 282679798530248147L;
	private static final String ENCODE_CHART_SET = "UTF-8";
	private static final long TEST_COUNT = 500;

	public static void main(String[] args) throws Exception {

		for (int i = 0; i < 100; i++) {
			System.out.println("---------- test start ----------" + new Integer(i));
			testSerialize();
			testBase64();
		}
	}

	private static void testBase64() throws Exception {
		TreeBean tree = new TreeBean();
		String bytes;

		long startTime = System.currentTimeMillis();
		for (int i = 0; i < TEST_COUNT; i++) {
			bytes = getStringFromObject(tree);
			getObjectFromString(bytes);
		}
		long endTime = System.currentTimeMillis();
		System.out.println("testBase64 : " + (endTime - startTime));
	}

	private static void testSerialize() throws Exception {
		TreeBean tree = new TreeBean();
		byte[] bytes;

		long startTime = System.currentTimeMillis();
		for (int i = 0; i < TEST_COUNT; i++) {
			bytes = getByteArrayFromObject(tree);
			getObjectFromByteArray(bytes);
		}
		long endTime = System.currentTimeMillis();
		System.out.println("testSerialize : " + (endTime - startTime));
	}

	private static Object getObjectFromString(String objectString) throws Exception {
		if (objectString == null || objectString.trim().length() == 0) {
			return null;
		}
		Base64 base64Decoder = new Base64();
		return getObjectFromByteArray(base64Decoder.decode(objectString.getBytes(ENCODE_CHART_SET)));
	}

	private static String getStringFromObject(Object dataObject) throws Exception {
		Base64 base64Decoder = new Base64();
		byte[] bytes = base64Decoder.encode(getByteArrayFromObject(dataObject));
		return new String(bytes, ENCODE_CHART_SET);
	}

	private static byte[] getByteArrayFromObject(Object dataObject) throws Exception {
		if (dataObject == null) {
			return null;
		}
		ByteArrayOutputStream ostream = new ByteArrayOutputStream();
		ObjectOutputStream p = new ObjectOutputStream(ostream);
		p.writeObject(dataObject);
		p.flush();
		byte[] data = ostream.toByteArray();
		p.close();
		ostream.close();
		return data;
	}

	private static Object getObjectFromByteArray(byte[] databyte) throws Exception {
		if (databyte == null) {
			return null;
		}
		ByteArrayInputStream intream = new ByteArrayInputStream(databyte);
		ObjectInputStream p = new ObjectInputStream(intream);
		return p.readObject();
	}
}

 

分享到:
评论

相关推荐

    java入门笔记.pdf

    文档还介绍了序列化和反序列化机制,用于对象的深复制和浅复制。 ### Java网络编程 网络编程章节向读者介绍了计算机网络的基础知识,包括HTTP、TCP、UDP和Socket编程。文档强调了网络编程在Java中的实现方式和应用...

    java反序列化漏洞入门总结.pdf

    - **标识特征**:序列化后的数据通常以“rO0AB”开头,表示这是经过Base64编码的序列化数据;如果是以“aced”开头,则表示数据是以十六进制形式存储的序列化结果。 - **存储位置**:序列化数据可能出现在HTTP请求的...

    Java入门基础.pdf

    * AIO和序列化流 网络编程 * 网络编程基础 * HTTP、TCP、UDP、Socket * 计算机网络知识 * HTTPS扫盲贴 * HTTPS编程 * 网络安全 安全加密 * 安全加密基础 * Base64 * 对称加密 * 非对称加密 * 消息摘要 * 数字...

    Java_base.rar_java ppt_java基础 ppt

    6. **IO流**:探讨输入/输出操作,包括文件读写、字节流和字符流、缓冲流以及对象序列化。 7. **多线程**:了解线程的概念,如何创建线程,线程同步和通信(synchronized关键字,wait()、notify()和notifyAll()方法...

    java学习成套ppt

    首先,我们看到的是"01firstapplication.pdf",这是Java入门的第一步,通常会讲解如何安装Java开发环境(JDK),编写第一个"Hello, World!"程序,以及理解Java的基础语法,包括变量、数据类型、运算符、流程控制语句...

    Apache xml-rpc入门

    - `&lt;base64&gt;`:对应 `byte[]` 类型。 这些类型可以满足大多数应用场景下的数据交换需求。 ##### 2. 客户端实现方式 Apache XML-RPC 提供了两种客户端实现方式: - **XmlRpcClient**:通过 `java.net....

    thrift入门学习教程

    - **TProtocol**:定义了Thrift数据的序列化和反序列化方式。 - **TTransport**:负责数据的实际传输。 - **底层I/O通信**:提供了各种网络传输方式,如TCP、UDP等。 **3. 数据类型** Thrift支持以下几种数据类型...

    Protocol Buffers 入门应用

    Protocol Buffers(简称protobuf)是Google开发的一种数据序列化协议,用于结构化数据的编码和解码。它能够将复杂的结构化数据转换成二进制流,以便在网络间高效地传输或者在磁盘上进行存储。与XML、JSON等文本格式...

    thrift入门

    在 Thrift 中,TProtocol 是一种传输协议规范,负责将数据序列化和反序列化。Thrift 提供了多种传输协议,包括 TBinaryProtocol、TCompactProtocol、TJSONProtocol、TSimpleJSONProtocol 和 TDebugProtocol 等,每种...

    base_tensorflow.rar

    这份教程以 Python 语言编写,通过 `base_tensorflow.py` 文件提供了详细的代码示例和注释,帮助读者快速入门。 1. **TensorFlow 基础** - **Tensor**:在 TensorFlow 中,数据是通过张量(Tensor)的形式进行处理...

    WebSocket入门实战工程

    6. **数据序列化和反序列化**:根据应用场景,可能需要自定义数据格式或采用JSON、Protobuf等标准格式进行数据交换。 7. **调试和日志**:为了方便问题排查,需要记录WebSocket的连接、消息收发和错误信息。 总的...

    major-project:我大学的重大项目。 分析社交媒体的随机性。 当您通过Twitter的推特控制Robocode AI时会发生什么?

    这将启动RobocodeEngine,从2个随机用户那里下载推文,对其进行序列化并开始战斗。 StartRobocodeEngine运行配置 主类: controller.startRobocode VM选项: -Xmx1024M -DNOSECURITY=true -XX:+...

    Python3 教程

    - IO编程:讲解文件读写、StringIO、BytesIO、操作文件和目录、序列化等输入输出操作。 - 进程和线程:理解多进程、多线程、ThreadLocal、进程与线程的对比、分布式进程等并发编程的概念。 - 正则表达式和常用内建...

    JBPM5_用户指南

    - **二进制持久化**:将状态序列化为二进制格式。 - **SafePoints**:保存关键点的状态。 - **配置持久化**:定义持久化策略。 - **事务**:确保流程操作的原子性和一致性。 - **流程定义**:持久化流程定义。 -...

    jfinal pdf文档

    #### 快速入门指南 **1. 创建项目** - 首先,在开发环境中创建一个新的 Java 项目。 - 确保你的开发环境已经配置好 Java 开发环境。 **2. 放入 JFinal 库文件** - 下载 JFinal 最新版本的库文件,将其加入项目的 ...

    c#学习笔记.txt

    很多人觉得它应该像C或者C++,但事实上它更像是java的一个clone,所以作为入门,读一下清华大学出版社出版的《Java 语言与面向对象程序设计》可能会对你有所帮助。本文假定你具备一切学习此语言所需的知识,没有也不...

    单点登录源码

    Protobuf & json | 数据序列化 | [https://github.com/google/protobuf](https://github.com/google/protobuf) Jenkins | 持续集成工具 | [https://jenkins.io/index.html](https://jenkins.io/index.html) Maven | ...

Global site tag (gtag.js) - Google Analytics