`

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;
}

 

分享到:
评论

相关推荐

    C# 序列化与反序列化

    在C#编程中,序列化和反序列化是两个关键的概念,它们主要用于数据持久化、网络传输或跨进程通信。...在实际项目中,根据需求选择合适的序列化方式(如二进制序列化、JSON序列化等)是非常重要的。

    web service 中的序列化

    BinaryFormatter是一种二进制序列化方式,它能够高效地将对象转换为二进制流,从而实现对象的持久化存储或网络传输。这种方式效率高,但是可读性较差。 #### 示例代码 **序列化过程** ```csharp using System; ...

    c# arraylist

    - **反序列化过程**: 从数据库读取到的字节数组重新创建`MemoryStream`,再使用`BinaryFormatter`将字节数组还原为`ArrayList`对象。 ### 4. 对象生命周期管理 #### 使用using语句 在代码中,使用了`using`语句来...

    java对象序列化与反序列化的默认格式和json格式使用示例

    这就是Java对象序列化与反序列化的基本概念,以及如何与JSON格式结合使用的示例。在实际应用中,我们还需要考虑异常处理、性能优化以及安全性问题,比如使用`transient`关键字忽略某些字段,或者使用`@...

    序列化与集合窗体应用

    在“序列化与集合窗体应用”项目中,可能涵盖了如何将集合对象(如ArrayList或Dictionary)进行序列化,然后保存到文件或数据库中。这在处理大量数据时非常有用,因为可以直接读取序列化的数据,避免了重新计算或...

    java序列化存储读取文件.doc

    尽管Java原生支持二进制序列化,但XML编码因其良好的可读性和跨语言兼容性而被广泛使用。 ### 示例代码分析 在给出的部分代码中,主要展示了如何使用`ObjectOutputStream`和`ObjectInputStream`进行序列化和反序列...

    hessian java +c# 数据测试

    这涉及到对Java对象的Hessian序列化,即将Java对象转化为Hessian二进制格式,以便通过网络发送。例如,在HessianDemo中,可能会有一个包含简单数据类型(如int、String)和自定义对象的业务逻辑方法,这些方法可以...

    对象输入输出流的图书馆里系统(没有界面)

    2. **对象反序列化(Deserialization)**:与序列化相反,反序列化是将字节流还原为原始对象的过程。这通常涉及读取由序列化产生的字节流并重建对象的完整状态。Java提供`ObjectInputStream`类来实现此操作。 3. **...

    Flex类图和与Java交互时类型转换对照

    - 当Flex向Java发送数据时,Flex的Number类型会被转换为Java的double类型,String、Boolean、Date等保持不变,Array会转换成ArrayList或自定义的Java对象数组。 - Java向Flex发送数据时,Java的数字类型会被转换为...

    C#写的影院管理系统(MyCiname)

    C#提供了两种主要的序列化方式:XML序列化和二进制序列化。XML序列化将对象转换为易于理解的XML格式,便于跨平台操作;而二进制序列化则以更紧凑的格式存储数据,适合内部存储和传输。通过System.Runtime....

    jackson的jar包,用于转换map与list到json

    这个特定的jar包专注于将Map和List对象转换为JSON格式,这意味着它包含了Jackson的核心组件,如`Jackson-databind`模块,该模块提供了`ObjectMapper`类,它是Jackson序列化和反序列化的主力。 使用Jackson,你可以...

    SCCE航班管理系统

    序列化是将对象的状态转换为可以存储或传输的形式的过程,通常为XML、JSON或二进制格式。反序列化则是相反的过程,将序列化的数据恢复为原来的对象状态。在SCCE系统中,序列化可能用于持久化航班数据,即使程序关闭...

    java软件工程师课程详细版.docx

    * 二进制序列化 * 对象的序列化和反序列化技术 * 在实际的具体应用(应用状态的保存、对象数据的重建)等 异常处理 * 什么是异常处理技术 * 为什么要应用它 * 异常的声明、抛出、捕获及自定义异常技术 * 异常类的...

    类型转换方法

    在Java和C#中,可以使用`ArrayList`或`List&lt;T&gt;`等集合类的构造函数将数组转换为列表,反之亦然。在Python中,数组通常是指`list`对象,可以通过`list()`函数将其他可迭代对象(如元组或字符串)转换为列表,或者使用...

    java电话本IO版本

    例如,FileReader和FileWriter用于读写文本文件,而FileInputStream和FileOutputStream则可能用于二进制数据的存储,如序列化后的对象。 对象序列化是Java提供的一种将对象转换为字节流并反之的过程,这在保存和...

    解析Android中的Serializable序列化

    3. **如何使用序列化与反序列化?** - **序列化**:使用`ObjectOutputStream`,调用其`writeObject()`方法将对象写入输出流。 ```java ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(...

    缓存List并写入文件持久化.zip

    序列化是将对象转换为字节流的过程,而反序列化则是将字节流还原为对象。Java提供了内置的序列化机制,只需让我们的类实现Serializable接口,就可以轻松地实现对象的序列化和反序列化。 以下是一个简单的Java示例,...

    修改phprpc源码以支持集合类的string类型的转换

    它是基于HTTP协议的,采用二进制序列化方式来传输数据,以提高通信效率。源码的修改可能涉及到以下几个关键环节: 1. **序列化与反序列化**:在Phprpc中,当数据从客户端发送到服务器,或者从服务器响应到客户端时...

Global site tag (gtag.js) - Google Analytics