(java入门)BASE64 & 序列化

本文通过实验对比了Java中对象序列化与Base64编码的性能差异,结果显示序列化消耗的时间更多。通过对TreeBean对象进行多次序列化及反序列化、Base64编码及解码操作,量化分析了两种方法的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结论:序列化比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();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值