java工具类之对象与字节数组之间的互相转换

来源:互联网 发布:支付宝 api端口号 编辑:程序博客网 时间:2024/04/30 23:38

    在很多应用场景下,如多进程通信、多线程通信、多子系统、多模块间的通信,都可以采用序字节数组作为转换,或者置于消息队列中也是常见情况。

    本工具类即解决对象与字节数组之间的互相转换的问题。

    如输入:String[] strArray = { "str1", "str2", "str3" };

        经过ObjectToByteArray方法处理后转换为字节数组,

        字节数组经过ByteArrayToObject方法处理后转换成Object,

        并经过强制转换,则可转换成原始的对象类型。

    具体代码和测试用例,如下方代码:

     

package com.letv.zel.warehouse.utils;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.Arrays;import org.apache.log4j.Logger;/** * 对象与字节之间转换工具类 *  * @author zhouerliang * */public class ObjectAndByteArrayConvertUtil {// 做日志用private static Logger logger = Logger.getLogger(ObjectAndByteArrayConvertUtil.class);/** * 将字节数组转换为对象 *  * @param bytes * @return */public static Object ByteArrayToObject(byte[] bytes) {if (bytes == null) {return null;}Object obj = null;try {ByteArrayInputStream bi = new ByteArrayInputStream(bytes);ObjectInputStream oi = new ObjectInputStream(bi);obj = oi.readObject();bi.close();oi.close();} catch (Exception e) {logger.info("ByteArrayToObject字节对象转换为对象时,出现错误--" + e.getMessage());e.printStackTrace();}return obj;}/** * 将对象转换为字节数组 *  * @param obj * @return */public static byte[] ObjectToByteArray(Object obj) {if (obj == null) {return null;}byte[] bytes = null;try {// object to bytearrayByteArrayOutputStream bo = new ByteArrayOutputStream();ObjectOutputStream oo = new ObjectOutputStream(bo);oo.writeObject(obj);bytes = bo.toByteArray();bo.close();oo.close();} catch (Exception e) {System.out.println("ObjectToByteArray字节对象转换为对象时,出现错误--"+ e.getMessage());e.printStackTrace();}return bytes;}// 对象转化为字节时候的缓存字节大小public static int default_byte_array_init_size = 4096;public static byte[] getByteArrayOutputStream(InputStream is) {ByteArrayOutputStream bios = new ByteArrayOutputStream();byte[] byteArray = new byte[default_byte_array_init_size];try {int once_len = 0;while ((once_len = is.read(byteArray, 0,default_byte_array_init_size)) != -1) {bios.write(byteArray, 0, once_len);byteArray = new byte[default_byte_array_init_size];// System.out.println("read once!");}byteArray = bios.toByteArray();return byteArray;} catch (Exception e) {e.printStackTrace();} finally {if (bios != null) {try {bios.close();} catch (IOException e) {e.printStackTrace();}}}return null;}public static void main(String[] args) throws Exception {String[] strArray = { "str1", "str2", "str3" };System.out.println("原始字符串数组=" + Arrays.toString(strArray));byte[] byte_array = ObjectToByteArray(strArray);String[] strArray_copy = (String[]) ByteArrayToObject(byte_array);System.out.println("转换后的字符串数组=" + Arrays.toString(strArray_copy));}}

更多学习讨论,      请加入官方QQ技术群320349384,
                                 官方天亮论坛:http://bbs.yuqing36524.com/
                                 天亮教育视频链接:http://pan.baidu.com/s/1pJJrcqJ



0 0
原创粉丝点击