zl程序教程

您现在的位置是:首页 >  后端

当前栏目

JAVA笔记——序列化

JAVA笔记 序列化
2023-09-11 14:20:33 时间

所谓的对象序列化(在很多地方也被成为串行化),是指将对象转换成二进制数据流的一种实现手段。通过将对象序列化,可以方便地实现对象的传输及保存。

Java中提供有ObjectInputStream与ObjectOutputStream这两个类用于序列化对象的操作。这两个类是用于存储和独缺对象的输入输出流类,只要把对象中的所有成员变量都存储起来,就等于保存了这个对象,之后从保存的对象之中再将对象读取进来就可以继续使用此对象。ObjectInputStream类与ObjectOutputStream类,用于帮助开发者完成保存和读取对象成员变量取值的过程,但要求读写或存储的对象必须实现了Serializable接口,但Serializable接口中没有定义任何方法,仅仅被用作一种标志,已被编译器作特殊处理。

下面是对象的序列化范例:

 import java.io.* ;
 public class Person implements Serializable
 {
  private String name ;
  private int age ;
  public Person(String name,int age)
  {
   this.name = name ;
   this.age = age ;
  }
  public String toString()
  {
   return " 姓名:"+this.name+",年龄:"+this.age ;
  }

这个类实现了Serializable接口,所以此类的对象可序列化。下面的范例使用ObjectOutputStream与ObjectInputStream将Person类的对象保存在文件之中:

 import java.io.*;
 public class SerializableDemo
 {
  public static void main( String args[] ) throws Exception
  {
   File f = new File("SerializedPerson") ;
   serialize(f);
   deserialize(f);
  }
 
  // 以下方法为序列化对象方法
  public static void serialize(File f) throws Exception
  {
   OutputStream outputFile = new FileOutputStream(f);
   ObjectOutputStream cout = new ObjectOutputStream(outputFile);
   cout.writeObject(new Person("张三",25));
   cout.close();
  }
  // 以下方法为反序列化对象方法
  public static void deserialize(File f) throws Exception
  {
   InputStream inputFile = new FileInputStream(f);
   ObjectInputStream cin = new ObjectInputStream(inputFile);
   Person p = (Person) cin.readObject();
   System.out.println(p);
  }

在程序中声明了一个deserialize()方法,此方法用于从文件中读取已经保存的对象。

另外,如果不希望类中的某个属性被序列化,可以在声明属性之前加上transient关键字。用这个关键字修饰的属性没有被保存下来,输出时,将输出默认值。   



最新内容请见作者的GitHub页:http://qaseven.github.io/

   


限量!Alibaba首发“Java成长笔记”,差距不止一点点 关于技术人如何成长的问题,一直以来都备受关注,因为程序员职业发展很快,即使是相同起点的人,经过几年的工作或学习,会迅速拉开极大的差距,所以技术人保持学习,提升自己,才能够扛得住不断上赶的后浪,也不至于被“拍死”在沙滩上。 近日,经过一朋友的透露,Alibaba也首发了一份限量的“Java成长笔记”,里面记载的知识点非常齐全,看完之后才知道,差距真的不止一点点
又一里程碑!阿里首推Java技术成长笔记,业内评级“钻石级” 根据数据表明,阿里巴巴已经连续3年获评最受欢迎的中国互联网公司,实际上阿里巴巴无论在科技创新力还是社会创造价值这几个方面,都是具有一定代表里的。在行业内,很多互联网企业也将阿里作为自己的标杆,越来越多的“打工人”也希望能够进到阿里工作。
阿里开发人员献礼“Java架构成长笔记”,深入内核,拒绝蒙圈 提起阿里,行外人联想到的关键词无非是“交易”、“淘宝”、“支付宝”,但对于程序员来说,阿里庞大的技术体系才是最吸引人的。实际上阿里作为国内一线互联网公司的头把交椅,内部的技术体系和发展都是备受关注的,对于程序员来说,能够进到阿里工作,就是对自己的技术水平进行一个提升和学习。 实际上,阿里内部的技术交流氛围是极其强烈的,技术人员也经常会交流自己的学习经验和技术总结。今天要分享的,则是Alibaba开发人员献礼的“Java架构成长笔记”,带我们深入内核,拒绝蒙圈!
Java架构速成笔记:七大专题,1425页考点,挑战P8岗 们都知道,在程序员的职业生涯中,有多个发展方向,不过就数据表明,近年来选择架构师方向的开发人员也越来越多。 对于架构师的发展前途,我相信是已经没有争议的,但这个“概念”对于很多开发人员来说,并没有太清晰的认识,怎样才能成为架构师,是很多程序员心里的疑问。 所以,就架构师需要掌握的技术来说,我们特此整理一份Java架构速成笔记分享给你,包含七大专题,共1425页经典考点,希望吃透后的你能够轻松挑战P8岗。
干货来袭!阿里大佬“亲码”Java全线笔记,差距不止一点点 文章之前小编想问大家一个问题:大家起初选择做开发是因为感兴趣?还是就单纯地觉得这个行业的工资相对于其他行业来讲要高一点? 如果是前者就觉得自己喜欢代码,喜欢开发工作,那么一直做开发也是一件的不错的事。不过要考虑当做开发10年后,自己所做的工作,一个大学毕业2、3年的开发人员一样能做时,你的价值在走下坡路,越来越不值钱。所以要时刻保持学习,并且深入研究技术,往架构师方向发展。当然时刻保持学习,并且深入研究技术对于后者同样适用,只有你技术牛逼了,你才有底气要求涨薪,才能拿到理想的薪资。(下图是程序员的通用职业发展路线,大家可以参考一下)
系统梳理面试6大专题,阿里爆款Java面试速成笔记也太香了 每年的金三银四马上又要到了,相信有很多人都在准备面试了。我们都知道想要在金三银四面试跳槽肯定是要预先投简历的,不知道大家的简历投得怎么样了。反正我最近是收到很多粉丝的私信说自己投了简历却杳无音信,在第一关就败下阵来。(不瞒大家说这里楼主是有点幸灾乐祸的,哈哈)
进阶面试皆宜!阿里强推Java程序员进阶笔记,差距不止一点点 程序员要如何成长这个问题,一直是各大网站、论坛的热点。对此网络上众说纷纭,一千个读者里面就有一千个哈姆雷特。LZ觉得想要让个人技能成长速度,大于公司规模或业务的成长速度,不断优化自己,成为一名“不错”的程序员主要需要掌握以下学习方法与实战技巧。
最壕逆天改命:18名Java程序员凭阿里P8笔记,同时斩获大厂offer 上高中时由于看了一本《坏蛋怎么练成的》从此一发不可收拾,对小说的痴迷渐渐成了病态,上课看下课看,成绩一落千丈,还好高三幡然醒悟勉勉强强上了一个“野鸡”二本,学了所有男生都喜欢的计算机专业;
阿里P7架构师,耗时十年整理的Java飞升笔记,差距不是一点点 这个问题就不用假如了,我本身从事Java开发已经十年了,去年因为疫情原因导致公司需要断臂求生,熟悉的那些小伙伴们相继离开,心中五味杂陈,思前想后决定离开这个呆了五年的地方。在猎头的引荐下,最终选择了阿里;
牛客java基础刷题笔记(三) 当你创建一个新的实例对象时,它会得到一块新的内存空间。但是类中的静态成员变量是所有对象共有的,也就是在一片属于类的存储空间中,被所有对象共有。 servlet在多线程下其本身并不是线程安全的。 如果在类中定义成员变量,而在service中根据不同的线程对该成员变量进行更改,那么在并发的时候就会引起错误。最好是在方法中,定义局部变量,而不是类变量或者对象的成员变量。由于方法中的局部变量是在栈中,彼此各自都拥有独立的运行空间而不会互相干扰,因此才做到线程安全。 JDK提供的用于并发编程的同步器 Java 并发库 的Semaphore 可以很轻松完成信号量控制,Semaphore可以控制某个资源