Java序列化对象的一个使用案例-使用Http发送对象
来源:互联网 发布:商城模板html源码下载 编辑:程序博客网 时间:2024/06/07 02:34
《 Effective Java 》中序列化一节关于java的序列化存在如下说法:对象序列化(object serialization)API,它提供了一个框架,用来将对象编码成字节流(serializing),并从字节流编码中重新构建对象(deserializing)。一旦对象被序列化后,它的编码就可以从一台正在运行的jvm传到另一台jvm上,或者被存储在磁盘上,供以后反序列化时用(如tomcat的session的可持久化)。序列化技术为 远程通信 提供了标准的线路级对象表示法,也为JavaBeans组件结构提供了标准的 持久化 数据格式。
关于java序列化,看过不少资料,正好最近在重读Effective Java,然后加上这两天碰到一个需求,能很好的诠释序列化,所以在这边小结下。
需求:系统中自己写了个内存缓存cache,然后集群内每个节点都单独维护自己各自的内存缓存(ps:有人肯定该说艾斯比,怎么不用Memcached或者Redis,么法,leader的要求…… ),这个内存缓存其实就是基于Map的,key=String,value=Object对象。cache需要提供这样一个方法,要能够刷新集群内所有节点的map中单个KV。
分析如上需求,map中value保存的是Object,这个Object并不是一般的String之类的,而恰恰就是一个真正名符其实的JavaBean对象,刷新时,需要将新的bean发送各节点,由各节点再各自操作内存中的map。这样,就出现了雏形,各节点需要提供一个http接口,刷新时,将bean对象发到到http上,这样就形成了上述Effective Java说到的场景,为远程通信 提供标准的线路级对象表示法,也即 将Object bean以stream的形式post到http接口,http接口接到stream后,将stream反序列化成bean对象。
代码实现如下:
javabean就不列了,是一个很纯粹的bean类,只不过该类一定是序列化后的(关于序列化的高级进阶请参考Effective Java),笔者这里只 implements Serializable 即可满足需求。
java:HttpPost工具类
这里有点要着重说明下,httpConnect的Content-Type的一定要设置为 application/x-java-serialized-object ,否则http接口处在接收stream的时候会出现java.io.EOFException 。另外:输出对象使用的是ObjectOutputStream的writeObject方法。
http接口接收stream,并反序列化为Object bean即可:
- Java序列化对象的一个使用案例-使用Http发送对象
- Java序列化对象的一个使用案例-使用Http发送对象
- Java 序列化对象的一个使用案例
- Java 序列化对象的一个使用案例
- jackson序列化java对象的使用
- java 对象序列化使用
- java 使用xom对象数据序列化为xml、反序列化、Preferences相关操作小案例
- Java对象序列化使用基础
- 介绍Java对象序列化使用基础
- Java对象序列化使用基础
- Java对象序列化使用基础
- JAVA序列化在IO中读写对象的使用
- java提高篇-----使用序列化实现对象的拷贝
- java序列化一个对象
- C#对象序列化的基本使用
- 使用序列化对象的小例子
- 对象序列化之transient的使用
- 使用序列化实现对象的拷贝
- android 修改源码framework后如何编译
- STL的string判断为空字符串
- Docker部署(四):Gogs
- AR试妆应用功能演示及操作详细步骤
- SoapUI作为RESTful api请求响应模拟工具的使用方法
- Java序列化对象的一个使用案例-使用Http发送对象
- python3 下载图片
- flex.css,移动端flex布局神器,兼容微信,UC,webview等移动端主流浏览器08.10
- commons.lang中常用的工具
- 算法- 前言
- 20. Valid Parentheses
- HashMap,LinkedHashMap,TreeMap的区别
- ArcEngine对CSV文件的操作
- 代理模式