`

ArrayList与二进制数组的转换,对象序列化与序列化还原

    博客分类:
  • Java
阅读更多

有的时候我们想将对象保存到数据库中,就需要将对象序列化为二进制数组,然后保存到数据库。

从数据库提取出二进制数组,还需要将其还原为对象。

 

本例中ArrayList已经implements Serializable,其他对象需要实现此接口才能序列化

 

1、从ArrayList序列化为二进制数组

/**
	 * 将ArrayList转化为二进制数组
	 * 
	 * @param list
	 *            ArrayList对象
	 * @return 二进制数组
	 */
	private byte[] getImageSpanInfoBytesFromObject(ArrayList<ImageSpanInfo> list) {
		ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
		try {
			ObjectOutputStream objectOutputStream = new ObjectOutputStream(
					arrayOutputStream);
			objectOutputStream.writeObject(list);
			objectOutputStream.flush();
			byte[] data = arrayOutputStream.toByteArray();
			objectOutputStream.close();
			arrayOutputStream.close();
			return data;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

 

2、从byte[]还原ArrayList

 

/**
	 * 从二进制数组转换Arrayist对象
	 * @param bytes 二进制数组
	 * @return ArrayList返回对象
	 */
	private ArrayList<ImageSpanInfo> getImageSpanInfoListFromBytes(byte[] bytes) {
		ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(bytes);
		try {
			ObjectInputStream inputStream = new ObjectInputStream(
					arrayInputStream);
			ArrayList<ImageSpanInfo> list = (ArrayList<ImageSpanInfo>) inputStream
					.readObject();
			inputStream.close();
			arrayInputStream.close();
			return list;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

 

上述的前提是需要ArrayList的item已经实现了Serializable,否则会报出java.io.NotSerializableException

 

public class ImageSpanInfo implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public String path;
	public int start;
	public int end;
}

 

分享到:
评论

相关推荐

    java内部学习笔记.docx

    2.15二进制基础 14 2.16 Java基础其他注意事项 14 面向对象 16 3.1类 16 3.2对象 16 3.3包 16 3.4方法及其调用 17 3.5引用 17 3.6访问控制(封装) 17 3.7构造器 17 3.8 super()、super.和 this()、this. 18 3.9...

    java jdk实列宝典 光盘源代码

    序列化和反序列化对象(将不长用的对象暂时持久化到文件中为对象的序列化,反之用时再把对象恢复到内存为反序列化); 控制对象的序列化和反序列化; 读jar包的资源文件;用zip格式压缩 和解压文件;操作Excel文件;...

    java基础案例与开发详解案例源码全

    3.2.2 普及二进制36 3.2.3 进制间转换37 3.2.4 基本数据类型间转换38 3.2.5 数据类型应用实例38 3.2.6 引用数据类型39 3.3 关键字.标识符.常量39 3.3.1 变量命名规范39 3.3.2 经验之谈-常见错误的分析与处理40 ...

    Java JDK实例宝典

    14 序列化和反序列化对象 7. 15 控制对象的序列化和反序列 7. 16 读jar包的资源文件 7. 17 用Zip格式压缩和解压缩文件 7. 18 操作Excel文件 7. 19 操作PDF文件 7. 20 自定义日志文件类 ...

    C#编程经验技巧宝典

    98 &lt;br&gt;0153 如何自定义数字小数点左边分组位数 98 &lt;br&gt;0154 格式化输入数据为货币格式 99 &lt;br&gt;0155 如何计算两个整数的乘积 99 &lt;br&gt;0156 如何将二进制数转换为十进制数 100 &lt;br&gt;0157 如何...

    C#全能速查宝典

    《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用...

    asp.net知识库

    使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标...

    net学习笔记及其他代码应用

    而Remoting可以利用TCP/IP,二进制传送提高效率。 31.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行...

    C# for CSDN 乱七八糟的看不懂

    而且集合的元素可以是任意对象,操作也比数组灵活的多。 使用集合时,必须注意集合的生命期问题。如果有两个集合 L1 和 L2,使用 了 L1=L2; 后,只要 L2 生命期没有终结,它的以后的变化就可能会影响到 L1 的数值。...

    ASP.net技术内幕

    14.1.3 对数据库数据执行布尔查询 14.1.4 上传二进制文档并且进行索引 14.2 使用Microsoft Indexing Service 14.2.1 配置Microsoft Indexing Service 14.2.2 将SQL Server配置为使用...

    asp.net技术内幕(1)

    14.1.3 对数据库数据执行布尔查询 14.1.4 上传二进制文档并且进行索引 14.2 使用Microsoft Indexing Service 14.2.1 配置Microsoft Indexing Service 14.2.2 将SQL Server配置为使用Microsoft ...

    asp.net技术内幕(2)

    14.1.3 对数据库数据执行布尔查询 14.1.4 上传二进制文档并且进行索引 14.2 使用Microsoft Indexing Service 14.2.1 配置Microsoft Indexing Service 14.2.2 将SQL Server配置为使用Microsoft ...

    asp.net技术内幕(5)

    14.1.3 对数据库数据执行布尔查询 14.1.4 上传二进制文档并且进行索引 14.2 使用Microsoft Indexing Service 14.2.1 配置Microsoft Indexing Service 14.2.2 将SQL Server配置为使用Microsoft ...

    asp.net技术内幕(4)

    14.1.3 对数据库数据执行布尔查询 14.1.4 上传二进制文档并且进行索引 14.2 使用Microsoft Indexing Service 14.2.1 配置Microsoft Indexing Service 14.2.2 将SQL Server配置为使用Microsoft ...

    asp.net技术内幕(3)

    14.1.3 对数据库数据执行布尔查询 14.1.4 上传二进制文档并且进行索引 14.2 使用Microsoft Indexing Service 14.2.1 配置Microsoft Indexing Service 14.2.2 将SQL Server配置为使用Microsoft ...

    java 混淆工具,不可逆 jocky 也许是最好的了

    事实上,即便不加@preserve指令,Jocky对Java语言特有的一些private级别的方法不进行混淆,譬如,在序列化时有特殊作用的writeObject及readObject方法等。但笔者强烈建议: 针对这些有特殊含义不能够被混淆的 ...

    joc eclipse plugin

    我们可以把经过 Jocky编译的类文件以UltraEdit打开,可以发现在第8个字节上(类文件的major version)的数值是0x30,即十进制的48,这是JDK 1.4所能够理解的类文件版本(JDK 5.0默认编译的类文件版本是49)。前提是:应用...

    jocky 混肴编译rar包(ant和插件俩个版本)

    事实上,即便不加@preserve指令,Jocky对Java语言特有的一些private级别的方法不进行混淆,譬如,在序列化时有特殊作用的writeObject及readObject方法等。但笔者强烈建议: 针对这些有特殊含义不...

    2017最新大数据架构师精英课程

    3_java基础知识-循环-类型转换 4_循环-函数-数组-重载 5_多为数组-冒泡-折半-选择排序 6_oop-封装-继承-static-final-private 7_多态-接口-异常体系 8_适配器/ k% N! Y7 j/ |- c) O5 M' V6 S 9_多线程-yield-join-...

Global site tag (gtag.js) - Google Analytics