有的时候我们想将对象保存到数据库中,就需要将对象序列化为二进制数组,然后保存到数据库。
从数据库提取出二进制数组,还需要将其还原为对象。
本例中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#编程中,序列化和反序列化是两个关键的概念,它们主要用于数据持久化、网络传输或跨进程通信。...在实际项目中,根据需求选择合适的序列化方式(如二进制序列化、JSON序列化等)是非常重要的。
BinaryFormatter是一种二进制序列化方式,它能够高效地将对象转换为二进制流,从而实现对象的持久化存储或网络传输。这种方式效率高,但是可读性较差。 #### 示例代码 **序列化过程** ```csharp using System; ...
- **反序列化过程**: 从数据库读取到的字节数组重新创建`MemoryStream`,再使用`BinaryFormatter`将字节数组还原为`ArrayList`对象。 ### 4. 对象生命周期管理 #### 使用using语句 在代码中,使用了`using`语句来...
这就是Java对象序列化与反序列化的基本概念,以及如何与JSON格式结合使用的示例。在实际应用中,我们还需要考虑异常处理、性能优化以及安全性问题,比如使用`transient`关键字忽略某些字段,或者使用`@...
在“序列化与集合窗体应用”项目中,可能涵盖了如何将集合对象(如ArrayList或Dictionary)进行序列化,然后保存到文件或数据库中。这在处理大量数据时非常有用,因为可以直接读取序列化的数据,避免了重新计算或...
尽管Java原生支持二进制序列化,但XML编码因其良好的可读性和跨语言兼容性而被广泛使用。 ### 示例代码分析 在给出的部分代码中,主要展示了如何使用`ObjectOutputStream`和`ObjectInputStream`进行序列化和反序列...
这涉及到对Java对象的Hessian序列化,即将Java对象转化为Hessian二进制格式,以便通过网络发送。例如,在HessianDemo中,可能会有一个包含简单数据类型(如int、String)和自定义对象的业务逻辑方法,这些方法可以...
2. **对象反序列化(Deserialization)**:与序列化相反,反序列化是将字节流还原为原始对象的过程。这通常涉及读取由序列化产生的字节流并重建对象的完整状态。Java提供`ObjectInputStream`类来实现此操作。 3. **...
- 当Flex向Java发送数据时,Flex的Number类型会被转换为Java的double类型,String、Boolean、Date等保持不变,Array会转换成ArrayList或自定义的Java对象数组。 - Java向Flex发送数据时,Java的数字类型会被转换为...
C#提供了两种主要的序列化方式:XML序列化和二进制序列化。XML序列化将对象转换为易于理解的XML格式,便于跨平台操作;而二进制序列化则以更紧凑的格式存储数据,适合内部存储和传输。通过System.Runtime....
这个特定的jar包专注于将Map和List对象转换为JSON格式,这意味着它包含了Jackson的核心组件,如`Jackson-databind`模块,该模块提供了`ObjectMapper`类,它是Jackson序列化和反序列化的主力。 使用Jackson,你可以...
序列化是将对象的状态转换为可以存储或传输的形式的过程,通常为XML、JSON或二进制格式。反序列化则是相反的过程,将序列化的数据恢复为原来的对象状态。在SCCE系统中,序列化可能用于持久化航班数据,即使程序关闭...
* 二进制序列化 * 对象的序列化和反序列化技术 * 在实际的具体应用(应用状态的保存、对象数据的重建)等 异常处理 * 什么是异常处理技术 * 为什么要应用它 * 异常的声明、抛出、捕获及自定义异常技术 * 异常类的...
在Java和C#中,可以使用`ArrayList`或`List<T>`等集合类的构造函数将数组转换为列表,反之亦然。在Python中,数组通常是指`list`对象,可以通过`list()`函数将其他可迭代对象(如元组或字符串)转换为列表,或者使用...
例如,FileReader和FileWriter用于读写文本文件,而FileInputStream和FileOutputStream则可能用于二进制数据的存储,如序列化后的对象。 对象序列化是Java提供的一种将对象转换为字节流并反之的过程,这在保存和...
3. **如何使用序列化与反序列化?** - **序列化**:使用`ObjectOutputStream`,调用其`writeObject()`方法将对象写入输出流。 ```java ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(...
序列化是将对象转换为字节流的过程,而反序列化则是将字节流还原为对象。Java提供了内置的序列化机制,只需让我们的类实现Serializable接口,就可以轻松地实现对象的序列化和反序列化。 以下是一个简单的Java示例,...
它是基于HTTP协议的,采用二进制序列化方式来传输数据,以提高通信效率。源码的修改可能涉及到以下几个关键环节: 1. **序列化与反序列化**:在Phprpc中,当数据从客户端发送到服务器,或者从服务器响应到客户端时...