Java 序列化,java开发面试笔试题_ccc_ccc8的博客-程序员宅基地

技术标签: java  


我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。
扫描二维码或搜索下图红色VX号,加VX好友,拉你进【程序员面试学习交流群】免费领取。也欢迎各位一起在群里探讨技术。
推荐文章:Java 面试知识点解析Mysql优化技巧(数据库设计、命名规范、索引优化

 

Java 序列化

 

简介

定义

序列化:序列化是将对象转换为字节流。

反序列化:反序列化是将字节流转换为对象。




 

用途

序列化的用途有:




  •  
  • 序列化可以将对象的字节序列持久化——保存在内存、文件、数据库中。


     
  • 在网络上传送对象的字节序列。


     
  • RMI(远程方法调用)


     

序列化和反序列化

Java 通过对象输入输出流来实现序列化和反序列化:




  •  
  • 序列化:java.io.ObjectOutputStream 类的 writeObject() 方法可以实现序列化;


     
  • 反序列化:java.io.ObjectInputStream 类的 readObject() 方法用于实现反序列化。


     

序列化和反序列化示例:


public class SerializeDemo01 {

    enum Sex {

        MALE, FEMALE

    }

    static class Person implements Serializable {

        private static final long serialVersionUID = 1L;

        private String name = null;

        private Integer age = null;

        private Sex sex;

        public Person() {

            System.out.println("call Person()");

        }

        public Person(String name, Integer age, Sex sex) {

            this.name = name;

            this.age = age;

            this.sex = sex;

        }

        public String toString() {

            return "name: " + this.name + ", age: " + this.age + ", sex: " + this.sex;

        }

    }

    /**

     * 序列化

     */

    private static void serialize(String filename) throws IOException {

        File f = new File(filename); // 定义保存路径

        OutputStream out = new FileOutputStream(f); // 文件输出流

        ObjectOutputStream oos = new ObjectOutputStream(out); // 对象输出流

        oos.writeObject(new Person("Jack", 30, Sex.MALE)); // 保存对象

        oos.close();

        out.close();

    }

    /**

     * 反序列化

     */

    private static void deserialize(String filename) throws IOException, ClassNotFoundException {

        File f = new File(filename); // 定义保存路径

        InputStream in = new FileInputStream(f); // 文件输入流

        ObjectInputStream ois = new ObjectInputStream(in); // 对象输入流

        Object obj = ois.readObject(); // 读取对象

        ois.close();

        in.close();

        System.out.println(obj);

    }

    public static void main(String[] args) throws IOException, ClassNotFoundException {

        final String filename = "d:/text.dat";

        serialize(filename);

        deserialize(filename);

    }

}

输出:

name: Jack, age: 30, sex: MALE

Serializable 接口

被序列化的类必须属于 Enum、Array 和 Serializab

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ccc_ccc8/article/details/89702430

智能推荐

WinPcap学习(九)发送数据包_pcap sendpacket-程序员宅基地

原始的libcap库是不支持发送数据包的,因此,这是属于WinPcap的扩展。使用pcap_sendpacket()发送单个数据包打开适配器以后,调用pcap_sendpacket()来发送手工制作的数据包。pcap_sendpacket()的参数有一个要包涵发送数据的缓冲区,缓冲的长度,以及用来发送数据的适配器。注意,缓冲数据将直接发送到网络,而不会进行任何加工和处理。这就意味着应用程序..._pcap sendpacket

Android 热修复技术 Tinker 在 Android 中的实践_系统源码禁止tinker插件-程序员宅基地

欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/54934782 本文出自:【余志强的博客】Tinker初体验先到Github上下载Tinker源码,里面包含了tinker-sample-android,使用AndroidStudio导入该例子工程即可。导入工程后,运行程序 ,出现..._系统源码禁止tinker插件

android中u盘通讯,Android_Android中查看USB连接的外接设备信息的代码实例,1,USB存储设备(如:U盘,移动硬 - phpStudy...-程序员宅基地

private USBBroadCastReceiver mBroadcastReceiver;IntentFilter iFilter = new IntentFilter();iFilter.addAction(Intent.ACTION_MEDIA_EJECT);iFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);iFilter.addAction(..._action_media_eject

铁威马NAS数据备份使用教程-程序员宅基地

铁威马最新TOS 4.1系统更新了一款非常好用的备份软件:傲梅备份。它可以轻松地帮助你备份系统、文件、文件夹、硬盘、分区,一旦电脑发生异常时,你可以轻易地还原系统和数据到正常的状态。1.应用中心下载傲梅备份应用;2.PC端安装傲梅备份;3.打开备份软件;4.选择备份方式,开始备份(以系统备份为例);5.设置任务名称,选择备份盘符,选择备份路径,开始备份;6.如果想设置备份方式...

Unity3D 插件分享-程序员宅基地

转自:http://unity3d.9ria.com/?p=2171 200个插件免费分享约5G。【清单如下】2D_Toolkit_1.51 动画开发插件包FingerGestures 触摸插件ORK_Okashi_RPG_Kit Unity3D角色扮演游戏开发工具包uScript-Visual-Scripting-Tool-fo

一个函数能否被两个线程同时调用_一个线程,怎么同时用两个参数-程序员宅基地

其实你可以这样想,函数本身只是代码,代码是只读的,无论多少个线程同时调都无所谓(因为只读嘛)。但是函数里面总要用到数据,如果数据属于线程(比如函数参数、局部变量,存在栈上,每个线程都有自己的栈),那么同时调还是没关系,因为用的本线程的数据;但是如果用了一些全局数据,比如全局变量,同时操作一个数据结构(如对一个链表有什么操作),那就不行了,这时候锁就出来了。转自:http://bbs.china_一个线程,怎么同时用两个参数

随便推点

关于字符编码与解码的小结-程序员宅基地

针对下面几种常用的字符码表ASCII : 美国标准信息交换码,使用7位二进制数来表示所有的大小写字母,数字0~9,标点符号以及在美式英语中使用的特殊控制字符ISO8859-1 : 拉丁码表,兼容ASCII,还包括西欧语言,希腊语,泰语,阿拉伯语等GB2312 : 中文码表,兼容ASCII,每个英文占1个字节,中文占2个字节(2个字节都为负数,最高位都为1)GBK,GB18...

Android 多线程文件断点下载器实现(造轮子系列)(一)-程序员宅基地

1.介绍慢慢造轮子,在造轮子的过程中学习android相关的原理和设计模式。先开始一步步实现多线程文件断点下载器。这次的多线程文件断点下载器,要实现以下几点: 1. 断点续传,不只是单纯的点个暂停开始,而是在退出重进之后仍然有任务的进度,这个就需要用到数据持久化了。 2. 多任务并行下载,一定数量的任务并行下载,超过额定值的任务暂停等待。 3. 单任务多线程下载,这个需要服务端的支持2.从零开

i春秋-回归原始-程序员宅基地

0110011001101100011000010110011101111011011000110110010100110011011001010011010100110000001100100110001100101101001101000011100001100011001110010010110100110100011001000011010100110000001011010011100100111001001110010011000000101101001101010110001000111000

FF 新鲜事 -- FlashHelperService.exe-程序员宅基地

FlashHelperService.exeFF 新鲜事现在flash强制带flash helper service、开始流氓了FlashHelperService.exe 就是 FF 新鲜事,隶属 Adobe Flash Player 中文插件附带的一个推送软件。查看FlashHelperService属性和服务,是一家“重庆重橙网络科技有限公司”,嚯嚯~~禁用FlashHelperService.exeservices.msc服务中禁用“Flash Helper Service”删除_flashhelperservice.exe

tomcat启动之后都做了什么?_启动完tomcat_mmxgl的博客-程序员宅基地

tomcat流程起始​ 刚开始做项目的时候就觉得tomcat这个东西很神奇,就给项目打一个包就能当一个网站来访问,那时候就产生了一个疑惑,为什么tomcat要用servlet来搭配着使用才行,而且为什么servlet没有主方法就能直接运行出结果来,当时接触java时间并不是很长,对这些问题也没有深究;​ 然后后来学习springboot的时候就了解到Springboot里面是内置了tomcat的,当时就想tomcat是不是就是用java来写的,于是我就百度了一下,发现tomcat确实是java来写的。_启动完tomcat

RabbitMQ .NET消息队列使用入门(一)【简单示例】-程序员宅基地

首先下载安装包,我都环境是win7 64位:去官网下载 otp_win64_19.0.exe 和rabbitmq-server-3.6.3.exe安装好然后开始编程了:(1)创建生产者类: class Program { private static void Main() { //建立RabbitMQ连接和通道...