结论:序列化比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网络编程 网络编程章节向读者介绍了计算机网络的基础知识,包括HTTP、TCP、UDP和Socket编程。文档强调了网络编程在Java中的实现方式和应用...
- **标识特征**:序列化后的数据通常以“rO0AB”开头,表示这是经过Base64编码的序列化数据;如果是以“aced”开头,则表示数据是以十六进制形式存储的序列化结果。 - **存储位置**:序列化数据可能出现在HTTP请求的...
* AIO和序列化流 网络编程 * 网络编程基础 * HTTP、TCP、UDP、Socket * 计算机网络知识 * HTTPS扫盲贴 * HTTPS编程 * 网络安全 安全加密 * 安全加密基础 * Base64 * 对称加密 * 非对称加密 * 消息摘要 * 数字...
6. **IO流**:探讨输入/输出操作,包括文件读写、字节流和字符流、缓冲流以及对象序列化。 7. **多线程**:了解线程的概念,如何创建线程,线程同步和通信(synchronized关键字,wait()、notify()和notifyAll()方法...
首先,我们看到的是"01firstapplication.pdf",这是Java入门的第一步,通常会讲解如何安装Java开发环境(JDK),编写第一个"Hello, World!"程序,以及理解Java的基础语法,包括变量、数据类型、运算符、流程控制语句...
- `<base64>`:对应 `byte[]` 类型。 这些类型可以满足大多数应用场景下的数据交换需求。 ##### 2. 客户端实现方式 Apache XML-RPC 提供了两种客户端实现方式: - **XmlRpcClient**:通过 `java.net....
- **TProtocol**:定义了Thrift数据的序列化和反序列化方式。 - **TTransport**:负责数据的实际传输。 - **底层I/O通信**:提供了各种网络传输方式,如TCP、UDP等。 **3. 数据类型** Thrift支持以下几种数据类型...
Protocol Buffers(简称protobuf)是Google开发的一种数据序列化协议,用于结构化数据的编码和解码。它能够将复杂的结构化数据转换成二进制流,以便在网络间高效地传输或者在磁盘上进行存储。与XML、JSON等文本格式...
在 Thrift 中,TProtocol 是一种传输协议规范,负责将数据序列化和反序列化。Thrift 提供了多种传输协议,包括 TBinaryProtocol、TCompactProtocol、TJSONProtocol、TSimpleJSONProtocol 和 TDebugProtocol 等,每种...
这份教程以 Python 语言编写,通过 `base_tensorflow.py` 文件提供了详细的代码示例和注释,帮助读者快速入门。 1. **TensorFlow 基础** - **Tensor**:在 TensorFlow 中,数据是通过张量(Tensor)的形式进行处理...
6. **数据序列化和反序列化**:根据应用场景,可能需要自定义数据格式或采用JSON、Protobuf等标准格式进行数据交换。 7. **调试和日志**:为了方便问题排查,需要记录WebSocket的连接、消息收发和错误信息。 总的...
这将启动RobocodeEngine,从2个随机用户那里下载推文,对其进行序列化并开始战斗。 StartRobocodeEngine运行配置 主类: controller.startRobocode VM选项: -Xmx1024M -DNOSECURITY=true -XX:+...
- IO编程:讲解文件读写、StringIO、BytesIO、操作文件和目录、序列化等输入输出操作。 - 进程和线程:理解多进程、多线程、ThreadLocal、进程与线程的对比、分布式进程等并发编程的概念。 - 正则表达式和常用内建...
- **二进制持久化**:将状态序列化为二进制格式。 - **SafePoints**:保存关键点的状态。 - **配置持久化**:定义持久化策略。 - **事务**:确保流程操作的原子性和一致性。 - **流程定义**:持久化流程定义。 -...
#### 快速入门指南 **1. 创建项目** - 首先,在开发环境中创建一个新的 Java 项目。 - 确保你的开发环境已经配置好 Java 开发环境。 **2. 放入 JFinal 库文件** - 下载 JFinal 最新版本的库文件,将其加入项目的 ...
很多人觉得它应该像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 | ...