本文主要是介绍Hessian实现序列化、反序列化、案例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
摘要:Hessian实现序列化、反序列化案例。
一:创建Maven工程,引入Hessian依赖
<!--hessian--><dependency><groupId>com.caucho</groupId><artifactId>hessian</artifactId><version>4.0.38</version></dependency>
二:编写Hessian序列化,反序列化方法
package cn.micai.base.io;import com.caucho.hessian.io.HessianInput;
import com.caucho.hessian.io.HessianOutput;import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;/*** @Auther: zhaoxinguo* @Date: 2018/8/23 10:48* @Description: Hessian实现序列化、反序列化*/
public class HessianSerializeDeserializeMain {/*** Hessian实现序列化* @param employee* @return* @throws IOException*/public static byte[] serialize(Employee employee){ByteArrayOutputStream byteArrayOutputStream = null;HessianOutput hessianOutput = null;try {byteArrayOutputStream = new ByteArrayOutputStream();// Hessian的序列化输出hessianOutput = new HessianOutput(byteArrayOutputStream);hessianOutput.writeObject(employee);return byteArrayOutputStream.toByteArray();} catch (IOException e) {e.printStackTrace();} finally {try {byteArrayOutputStream.close();} catch (IOException e) {e.printStackTrace();}try {hessianOutput.close();} catch (IOException e) {e.printStackTrace();}}return null;}/*** Hessian实现反序列化* @param employeeArray* @return*/public static Employee deserialize(byte[] employeeArray) {ByteArrayInputStream byteArrayInputStream = null;HessianInput hessianInput = null;try {byteArrayInputStream = new ByteArrayInputStream(employeeArray);// Hessian的反序列化读取对象hessianInput = new HessianInput(byteArrayInputStream);return (Employee) hessianInput.readObject();} catch (IOException e) {e.printStackTrace();} finally {try {byteArrayInputStream.close();} catch (IOException e) {e.printStackTrace();}try {hessianInput.close();} catch (Exception e) {e.printStackTrace();}}return null;}public static void main(String [] args) {Employee employee = new Employee();employee.setEmployeeId(1);employee.setEmployeeName("赵新国");employee.setDepartment("软件工程师");// 序列化byte[] serialize = serialize(employee);System.out.println(serialize);// 反序列化Employee deserialize = deserialize(serialize);System.out.println(deserialize.toString());}}
三:编写Employee对象
package cn.micai.base.io;import java.io.Serializable;/*** 描述:* <p>** transient使用小结* 1.一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。* 2.transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。* 3.被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。** @author: 赵新国* @date: 2018/6/7 12:10*/
public class Employee implements Serializable {private static final long serialVersionUID = 1L;private int employeeId;private String employeeName;/*** 使用transient关键字,表示该字段不序列化*/private transient String department;public int getEmployeeId() {return employeeId;}public void setEmployeeId(int employeeId) {this.employeeId = employeeId;}public String getEmployeeName() {return employeeName;}public void setEmployeeName(String employeeName) {this.employeeName = employeeName;}public String getDepartment() {return department;}public void setDepartment(String department) {this.department = department;}@Overridepublic String toString() {return "Employee{" +"employeeId=" + employeeId +", employeeName='" + employeeName + '\'' +", department='" + department + '\'' +'}';}
}
四:测试结果
温馨提示:这里反序列化以后,department字段为空,是因为在Employee对象里面对这个字段加了transient修饰符,该修饰符的作用就是该字段不序列化,所以反序列化后,该字段为空是正常的。
这篇关于Hessian实现序列化、反序列化、案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!