当前位置: 首页 > news >正文

java中的序列化 (r4笔记第64天)

java中的序列化是一个很有意思的接口,只需要声明而无需做额外的工作,但是在虚拟机内部却做了大量的工作保证了这一特点。只要对象实现了序列化接口,就会把它转换为一个字节序列,当需要的时候能够把这个字节序列完全恢复为原来的对象。这一过程是可以通过远程调用,网络进行,所以说从某种程度而言,序列化能够实现轻量级的持久化。我们通过一个简单的程序来模拟说明,假设我们需要打印张大爷的银行流水信息。我们定义一个银行流水类,存钱类,取钱类这里存钱的过程我们可以理解为序列化。取钱的过程我们可以理解为反序列化。这两个过程在这个例子中式完全独立的。银行流水类

  1. import java.io.Serializable;

  2. public class Bank_Transaction implements Serializable {

  3. private String customer_name;

  4. private double amount ;

  5. public String getCustomer_name() {

  6. return customer_name;

  7. }

  8. public void setCustomer_name(String customer_name) {

  9. this.customer_name = customer_name;

  10. }

  11. public double getAmount() {

  12. return amount;

  13. }

  14. public void setAmount(double amount) {

  15. this.amount = amount;

  16. }

  17. }

存钱类

  1. import java.io.FileOutputStream;

取钱类

  1. import java.io.FileInputStream;

在这个过程中,张大爷存了一笔钱,这些信息对于取钱类是完全屏蔽的。我们运行一下存钱类,先存入一笔钱[ora11g@rac1 test]$ $ORACLE_HOME/jdk/bin/java TopupMr Zhang top up amount: 1005.0这个时候会生成一个文件,Bank_trxs通过strings得到的内容如下,因为这个文件是二进制文件,通过strings得到的内容还是能够看出一些眉目来。[ora11g@rac1 test]$ strings Bank_trxsBank_TransactionamountLcustomer_nametLjava/lang/String;xp@Mr Zhang这个时候我们运行取钱类来看看,取钱的时候发现当时存了1005[ora11g@rac1 test]$ $ORACLE_HOME/jdk/bin/java WithdrawMr Zhang withdraw amount: 1005.0java的这种持久化机制会在虚拟机内部实现,反序列化也只有java自身才能实现,这也是Java的一种持久化方案吧,对于更具有互操作性的方案就是xml,毕竟xml还是通用并且普遍使用的一种文件格式。序列化在其它软件中也有体现,在Hadoop中的实现据称更加轻量级,简便,我们在后面继续讨论。

相关文章:

  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • 通过shell脚本快速定位active session问题(r4笔记第65天)
  • 重温二分查找算法(r4笔记第66天)
  • 不要成为技术的奴隶(一) (r4笔记第67天)
  • 最简单的web服务器实现(一)(r4笔记第68天)
  • 通过编程控制CPU利用率(r4笔记第69天)
  • 通过图表简化sql语句的表关联(r4笔记第70天)
  • 巧用外部表避免大量的insert (r4笔记第71天)
  • 海量数据迁移之数据抽取流程 (r4笔记第72天)
  • 重温快速排序(r4笔记第73天)
  • 海量数据迁移之sqlldr和datapump的缺点分析(r4笔记第74天)
  • mongoDB初探第一篇(r4笔记第75天)
  • 通过单例模式模拟RAC连接 (r4笔记第76天)
  • 特殊的物化视图刷新 (r4笔记第77天)
  • 总结nmon的诸多优点 (r4笔记第78天)
  • [ JavaScript ] 数据结构与算法 —— 链表
  • egg(89)--egg之redis的发布和订阅
  • ES6之路之模块详解
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Netty 4.1 源代码学习:线程模型
  • node和express搭建代理服务器(源码)
  • Vue2 SSR 的优化之旅
  • 基于HAProxy的高性能缓存服务器nuster
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 如何学习JavaEE,项目又该如何做?
  • 以太坊客户端Geth命令参数详解
  • 怎么将电脑中的声音录制成WAV格式
  • 2017年360最后一道编程题
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (python)数据结构---字典
  • (Python第六天)文件处理
  • (二)斐波那契Fabonacci函数
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (四) 虚拟摄像头vivi体验
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)fock函数详解
  • (转)Sql Server 保留几位小数的两种做法
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET 回调、接口回调、 委托
  • .NET构架之我见
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [1181]linux两台服务器之间传输文件和文件夹
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [C++]——带你学习类和对象
  • [C++]模板与STL简介
  • [codeforces]Checkpoints
  • [EFI]DELL XPS13 9360电脑 Hackintosh 黑苹果efi引导文件
  • [FxCop.设计规则]8. 也许参数类型应该是基类型