什么是java序列化,如何实现java序列化?
企业面试题库精选800题

企业面试题库精选800题1、meta标签的作用是什么2、ReenTrantLock可重入锁(和synchronized的区别)总结3、Spring中的自动装配有哪些限制?4、什么是可变参数?5、什么是领域模型(domain model)?贫血模型(anaemic domain model)和充血模型(rich domain model)有什么区别?6、说说http,https协议7、"=="和equals方法究竟有什么区别?8、&和&&的区别?9、.super.getClass()方法调用?10、10条SQL优化技巧11、10道经典java面试题_实习生必问!12、15个Java线程并发面试题和答案13、15个高级Java多线程面试题及回答14、2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据15、2018年java分布式相关最新面试题16、2018最新java技术面试题与答案17、23种经典设计模式都有哪些,如何分类?18、4个Spring常见面试题及答案解析19、58到家MySQL数据库开发规范20、9条改善Java性能的小建议21、9道常见的java笔试选择题22、abstract class和interface有什么区别23、ActiveMQ是什么24、activity是什么?25、Ajax的最大的特点是什么26、ajax的缺点27、ajax请求时,如何解释json数据28、ajax请求的时候get和post方式的区别29、Ajxa常见问题都有哪些30、Anonymous Inner Class(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口31、Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口?32、aop代理模式33、ArrayList、Vector、LinkedList的区别34、ArrayList与LinkedList的区别35、ArrayList遍历时正确删除元素36、Arrays.sort实现原理和Collection实现原理37、BeanFactory和ApplicationContext38、BeanFactory和FactoryBean39、BIO、NIO和AIO40、break和continue的作用41、C/S与B/S区别42、CAS机制是什么?有什么缺点,会出现什么问题43、char型变量中能不能存贮一个中文汉字?为什么?44、Class类的作用?生成Class对象的方法有哪些?45、Collection和Collections的区别?46、Comparable和Comparator接口是干什么的?列出它们的区别47、ConcurrenHashMap介绍1.8中为什么要用红黑树48、cookie和session的区别,分布式环境怎么保存用户状态49、CSRF攻击防御方法50、CSS3有哪些新特性?51、CSS中link和@import的区别52、CSS中可以通过哪些属性定义,使得一个DOM元素不显示在浏览器可视范围内?53、css面试题及答案54、display:none与visibility:hidden的区别是什么?55、div+css的布局较table布局有什么优点?56、Doctype的作用?严格模式与混杂模式的区别?57、documen.write和innerHTML的区别?58、document load和document ready的区别59、drop,delete与truncate的区别60、Dubbo与DubboX区别61、Dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么?62、Dubbo中有哪些角色?63、Dubbo在安全机制方面是如何解决的64、Dubbo执行流程?65、Dubbo支持的协议有哪些?66、Dubbo支持的注册中心有哪些?67、dubbo服务负载均衡策略?68、dubbo核心的配置有哪些?dubbo推荐用什么协议?69、dubbo连接注册中心和直连的区别70、dubbo通信协议dubbo协议为什么不能传大包71、dubbo通信协议dubbo协议为什么要消费者比提供者个数多72、dubbo通信协议dubbo协议为什么采用异步单一长连接73、dubbo通信协议dubbo协议适用范围和适用场景74、Enumeration接口和Iterator接口的区别有哪些?75、Error与RuntimeException的区别76、Error和Exception有什么区别?77、Eureka中的三种角色分别是什么?78、Eureka注册中心是什么?79、final、finally和finalized的区别?80、float f=3.4;是否正确?81、GC是什么?为什么要有GC?82、GC线程是否为守护线程?83、GET和POST的区别,何时使用POST?84、get和post请求的区别?85、hashCode()和equals()方法的重要性体现在什么地方86、hashCode方法的作用?87、HashMap 1.7与1.8的区别,说明1.8做了哪些优化,如何优化的88、HashMap是线程安全的吗,为什么不是线程安全的89、HashMap的扩容过程90、HashMap和Hashtable有什么区别91、HashMap和Hashtable的区别?92、HashMap实现原理93、hashMap底层实现94、HashMap是不是有序的?95、HashSet是如何保证不重复的96、HashSet和TreeSet有什么区别?97、HashSet的使用和原理(hashCode()和equals())98、heap和stack有什么区别?99、Hibernate对象的状态100、HR常问面试题总结(上)101、HR常问面试题总结(下)102、HTML Encode和URL Encode的区别103、html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分HTML和HTML5?104、HTML与XHTML二者有什么区别105、HTML含义和版本变化106、HTML字符实体的作用及其常用字符实体107、HTML表单的作用和常用表单项类型108、html面试题及答案109、HTML,CSS,Javascript在Web开发中分别起什么作用?110、http常见的状态码有那些?分别代表是什么意思?111、iframe的优缺点?112、img的alt与title有何异同?strong与em的异同?113、Integer与int的区别114、Iterator和ListIterator的区别是什么?115、j2ee常用的设计模式?说明工厂模式。
java 序列化失败 方法引用

文章标题:探究Java序列化失败的原因及方法引用的解决方案1. 前言在Java编程中,我们经常会遇到对象序列化和反序列化的问题。
而在序列化的过程中,有时会遇到序列化失败的情况,特别是在涉及到方法引用的情况下更是常见。
本文将从深度和广度的角度对Java序列化失败方法引用的问题进行全面探讨,并提出解决方案。
2. Java序列化失败的原因分析在Java中,对象序列化是将对象转换为字节流的过程,以便于在网络传输或者持久化存储。
而有时候,在序列化对象中包含方法引用时,就会出现序列化失败的情况。
这主要是因为方法引用是无法被序列化的,所以在序列化的过程中就会出现问题。
3. 方法引用的特点和问题方法引用是Java 8引入的新特性,它使得我们可以直接引用已有的方法,而不需要去编写Lambda表达式。
但是,方法引用的引入也给序列化带来了一些问题。
因为方法引用是指向方法的引用,而在序列化的过程中,是无法将方法引用直接转换成字节流的。
4. 序列化失败的常见场景在实际编码中,我们可能会遇到一些常见的场景,导致了序列化失败。
当我们序列化一个包含方法引用的对象时,就有可能出现序列化失败的情况。
另外,当我们将包含方法引用的对象进行网络传输或者存储到文件时,同样也会遇到序列化失败的情况。
5. 解决方案探讨针对Java序列化失败方法引用的问题,我们可以考虑一些解决方案。
我们可以尝试使用Lambda表达式来替代方法引用,因为Lambda表达式是可以被序列化的。
我们还可以考虑使用序列化代理来解决方法引用的序列化问题。
通过序列化代理,我们可以将方法引用替换为Lambda表达式,再进行序列化操作。
6. 个人观点和总结在我看来,Java序列化失败方法引用的问题是一个需要重视的话题。
通过深入探讨和解决这个问题,我们可以更好地提高程序的稳定性和可靠性。
我们也需要不断地学习和研究新的解决方案,以应对日益复杂的编程环境。
7. 结语通过本文的探讨,我们对Java序列化失败方法引用的问题有了更深入的理解和认识。
Serializable接口的意义和用法总结

Serializable接⼝的意义和⽤法总结Serializable是Java提供的序列化接⼝,是⼀个空接⼝,为对象提供标准的序列化与反序列化操作。
使⽤Serializable实现序列化过程相当简单,只需要在类声明的时候指定⼀个标识,便可以⾃动的实现默认的序列化过程。
private static final long serialVersionUID = 1L;上⾯已经说明让对象实现序列化,只需要让当前类实现Serializable接⼝,并且声明⼀个serialVersionUID就可以了,⾮常的简单⽅便。
实际上serialVersionUID都不是必须的,没有它同样可以正常的实现序列化操作。
User类就是⼀个实现了Serialzable的类,它是可以被序列化和反序列化的。
public class User implements Serializable {private static final long serialVersionUID = 1L;private String userId;private String userName;}通过Serializable实现对象的序列化过程⾮常的简单,⽆需任何操作,系统就为我们⾃动实现了。
如何进⾏对象的序列化与反序列化操作也是⾮常的简单,只需要通过ObjectOutputStream,ObjectInputStream进⾏操作就可以了。
//序列化过程public void toSerial() {try {User user = new User("id", "user");ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("user.txt"));objectOutputStream.writeObject(user);objectOutputStream.close();} catch (IOException e) {e.printStackTrace();}}//反序列化过程public void fromSerial(){try {ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("user.txt"));User user = (User) objectInputStream.readObject();objectInputStream.close();} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}是的,你没有看错,序列化与反序列化操作过程就是这么的简单。
进大厂面试题目及答案(3篇)

第1篇一、Java面试题及答案1. Java基础问题:Java中和equals()和hashCode()的区别是什么?答案:- `equals()`方法用于比较两个对象的引用是否相等,即两个对象是否指向同一个内存地址。
它默认的行为是检查两个对象的引用是否相同。
- `hashCode()`方法用于获取对象的哈希码,哈希码是对象的一个唯一值,通常用于散列查找。
`hashCode()`默认的行为是返回对象的内存地址的哈希码。
- 如果两个对象相等(`equals()`返回true),它们的哈希码也应该相等。
但如果两个对象的哈希码相等,它们不一定相等(即哈希冲突)。
2. JVM问题:简述JVM内存模型。
答案:JVM内存模型主要包括以下几个部分:- 堆(Heap):存储所有类的实例和数组的对象。
- 栈(Stack):每个线程有自己的栈,用于存储局部变量和方法调用。
- 方法区(Method Area):存储已经被虚拟机加载的类信息、常量、静态变量等数据。
- 本地方法栈(Native Method Stack):用于存储使用 native 方法调用的数据。
- 程序计数器(Program Counter Register):每条线程都有一个程序计数器,用于指示下一条要执行的指令。
3. 多线程问题:什么是线程安全?如何实现线程安全?答案:线程安全指的是在多线程环境下,多个线程可以同时访问某个资源而不引起数据不一致或竞争条件的问题。
实现线程安全的方法包括:- 同步(Synchronization):使用`synchronized`关键字来控制对共享资源的访问。
- 原子操作:使用Java提供的原子类,如`AtomicInteger`,`AtomicLong`等。
- 不可变对象:创建不可变对象,因为不可变对象天生是线程安全的。
- 使用线程局部变量:通过`ThreadLocal`类来为每个线程提供独立的变量副本。
二、前端面试题及答案1. HTML问题:HTML5与HTML4的主要区别是什么?答案:- HTML5引入了新的语义化标签,如`<article>`、`<section>`、`<nav>`、`<header>`等,提高了文档的结构性和可读性。
java的io面试题

java的io面试题在Java编程中,IO(Input/Output)是一个非常重要的概念,用于处理与输入和输出相关的任务。
在面试中,考官通常会问及关于JavaIO的问题,以评估应聘者对Java基础知识的了解程度。
以下是一些常见的Java IO面试题及其答案:1. 什么是流(Stream)?回答:流是Java中处理IO操作的抽象概念。
它代表了数据的传输,可以是从源(输入流)到目标(输出流)的传输。
流分为字节流和字符流两种类型。
2. 字节流和字符流有什么区别?回答:字节流以字节为单位进行数据传输,适用于处理二进制数据或者字节流形式的文本数据。
字符流以字符为单位进行数据传输,适用于处理字符数据。
3. 什么是缓冲流(Buffered Stream)?回答:缓冲流是对字节流和字符流的包装,提供了缓冲功能以提高数据读写的效率。
它通过减少与磁盘之间的实际访问次数来改善性能。
4. 文件读写常用的类有哪些?回答:Java提供了多个类用于文件读写,常见的有File、FileInputStream、FileOutputStream、FileReader、FileWriter等。
5. 如何读取文件内容?回答:可以使用FileInputStream或FileReader来读取文件内容。
首先,通过创建相应的流对象,并指定要读取的文件路径。
然后,使用read方法读取数据,并将其存储到变量中,直到读取完整个文件。
6. 如何写入文件?回答:可以使用FileOutputStream或FileWriter来写入文件。
首先,通过创建相应的流对象,并指定要写入的文件路径。
然后,使用write 方法将要写入的数据以字节或字符的形式传递给流对象。
7. 如何在文件中查找特定内容?回答:可以读取文件的每一行,逐行进行匹配搜索。
可以使用BufferedReader的readLine方法来逐行读取文件内容,并使用String的contains方法判断是否包含目标内容。
kryo 序列化算法

kryo 序列化算法Kryo序列化算法是一种高效的Java序列化框架,使用它可以快速的将Java对象序列化成字节数组,并将其反序列化成Java对象。
Kryo序列化算法在对大量的对象进行序列化和反序列化时,比Java默认序列化算法快10倍以上。
以下是详细的步骤阐述。
1. 导入Kryo库在使用Kryo序列化算法前,需要先导入Kryo库。
2. 实例化Kryo对象实例化Kryo对象是使用Kryo序列化算法的第一步。
Kryo提供了两种实例化方式:Kryo对象池和Kryo默认实例化方式。
Kryo对象池可以实现多线程环境下的对象共享,而Kryo默认实例化方式则会为每个线程实例化一个Kryo对象。
下面是使用Kryo对象池实例化Kryo对象的方法:KryoPool kryoPool =KryoPoolFactory.getKryoPoolInstance();Kryo kryo = kryoPool.borrow();3. 注册类在将Java对象序列化成字节数组时,需要将相关类进行注册,否则Kryo无法识别并序列化该类。
在Kryo中,可以使用以下两种方式注册类:注册类的具体实例和注册类的Class类型。
下面是注册类的具体实例的方法:Person person = new Person();person.setName("Tom");person.setAge(20);kryo.register(Person.class, new BeanSerializer(kryo, Person.class));byte[] bytes = kryo.serialize(person);4. 序列化对象在注册完需要序列化的类之后,就可以将Java对象序列化成字节数组了。
在Kryo中,使用“kryo.serialize(obj)”方法可以将Java对象序列化成字节数组,如下所示:Person person = new Person();person.setName("Tom");person.setAge(20);kryo.register(Person.class, new BeanSerializer(kryo, Person.class));byte[] bytes = kryo.serialize(person);5. 反序列化对象使用Kryo序列化算法进行反序列化对象时,需要先将字节数组转化为Java对象,然后进行反序列化。
高级java开发工程师笔试题
以下是一份高级Java开发工程师的笔试题,用于测试应聘者的Java技能和相关经验。
一、选择题(请选择正确的答案)
1.在Java中,以下哪个关键字用于声明一个方法为静态的?
A. static
B. const
C. volatile
D. transient
2.下列哪个选项是正确的Java注释?
A. // 这是一个注释
B. /* 这是一个注释*/
C. # 这是一个注释
D. / 这是一个注释
3.在Java中,哪个类是所有类的父类?
A. Object
B. Exception
C. NullPointerException
D. NumberFormatException
二、简答题(请简述以下问题)
4.什么是Java中的异常处理?如何使用try-catch块处理异常?
5.什么是Java中的泛型?泛型有哪些限制?
6.什么是Java中的多态性?如何实现多态性?
7.描述Java中的继承和接口的概念,并解释它们之间的区别。
8.什么是Java中的序列化?为什么我们需要序列化对象?
三、编程题(请编写以下问题的代码)
1.编写一个Java程序,实现一个简单的计算器,可以进行加、减、乘、除运算。
要求使用面向对象的方法设计程序,包括类和对象的概念。
2.编写一个Java程序,使用递归方法实现斐波那契数列的前n项和。
请给出时
间复杂度的分析。
dubbo面试题目大全(3篇)
第1篇第一部分:Dubbo基础概念1. 什么是Dubbo?- Dubbo是一个高性能、轻量级的开源Java RPC框架,用于简化分布式服务开发。
2. Dubbo的主要特点是什么?- 高性能、轻量级、灵活的配置、支持多种协议、服务治理、服务监控等。
3. Dubbo的架构设计是怎样的?- 模块化设计,包括Provider(服务提供者)、Consumer(服务消费者)、Registry(注册中心)、Monitor(监控中心)等。
4. 什么是服务提供者(Provider)和服务消费者(Consumer)?- 服务提供者是提供服务的一方,服务消费者是调用服务的一方。
5. 什么是注册中心(Registry)和监控中心(Monitor)?- 注册中心用于服务注册和发现,监控中心用于监控服务的运行状态。
第二部分:Dubbo核心组件6. 什么是服务接口(Service Interface)和服务实现(Service Implementation)?- 服务接口定义了服务的方法,服务实现是接口的具体实现。
7. 什么是序列化?Dubbo支持哪些序列化方式?- 序列化是将对象转换为字节流的过程,用于远程通信。
Dubbo支持多种序列化方式,如Hessian、Java序列化、Kryo等。
8. 什么是服务引用(Reference)和服务暴露(Export)?- 服务引用是从注册中心获取服务提供者信息,服务暴露是将本地服务发布到注册中心。
9. 什么是负载均衡?Dubbo支持哪些负载均衡策略?- 负载均衡是指将请求分发到多个服务提供者上,以实现负载均衡。
Dubbo支持多种负载均衡策略,如轮询、随机、最小连接数等。
10. 什么是服务降级?Dubbo如何实现服务降级?- 服务降级是指当服务不可用时,提供降级策略以保证系统的可用性。
第三部分:Dubbo高级特性11. 什么是服务限流?Dubbo如何实现服务限流?- 服务限流是指限制某个服务的调用频率,以防止服务过载。
java面试题基础篇
java面试题基础篇当涉及Java 面试的基础篇时,以下是一些常见的问题和主题,供你进行复习和准备:1. Java 基础:-什么是Java 编程语言?Java 的特点是什么?- Java 的数据类型有哪些?基本数据类型和引用数据类型有什么区别?-解释一下Java 的封装、继承和多态。
-什么是类和对象?如何创建类和对象?-什么是构造方法?它有什么作用?-什么是方法重载和方法重写?-解释一下静态变量和实例变量的区别。
-什么是接口和抽象类?它们之间的区别是什么?2. 面向对象设计:-什么是SOLID 原则?分别解释每个原则的含义。
-什么是设计模式?举例说明几个常用的设计模式。
-什么是单例模式?如何实现线程安全的单例模式?-什么是工厂模式和抽象工厂模式?3. 异常处理:-什么是异常?Java 中的异常处理机制是什么?-解释一下try-catch-finally 块的工作原理。
-什么是运行时异常和受检异常?4. 集合框架:-介绍Java 的集合框架。
ArrayList 和LinkedList 的区别是什么?-什么是Map 接口?HashMap 和TreeMap 的区别是什么?-什么是迭代器?如何使用迭代器遍历集合?5. 线程与并发:-什么是线程?如何创建和启动一个线程?-解释一下同步和异步,阻塞和非阻塞。
-什么是线程安全?如何避免线程安全问题?-什么是死锁?如何避免死锁?6. IO 操作:-什么是输入流和输出流?-解释一下字节流和字符流的区别。
-什么是序列化和反序列化?7. Java 虚拟机(JVM):-什么是JVM?JVM 的主要组成部分是什么?-什么是垃圾回收?Java 中的垃圾回收机制是什么?8. 基础算法和数据结构:-解释一下栈和队列。
-什么是哈希表(HashTable)?如何解决哈希冲突?-什么是递归?递归的应用和注意事项是什么?这只是一些常见的Java 面试基础题目,你可以根据实际情况进行深入的学习和准备。
javajson序列化 parseobject方法
javajson序列化 parseobject方法Java JSON序列化简介在Java开发中,我们经常需要将对象转换成JSON格式进行传输或存储。
Java提供了多种方式来实现JSON序列化,其中最常用的方式是使用parseObject方法。
使用parseObject方法概述parseObject方法是阿里巴巴的FastJSON库提供的一种JSON序列化方法。
它可以将一个JSON字符串转换为Java对象。
示例以下是使用parseObject方法的简单示例:String jsonStr = "{\"name\":\"John\", \"age\":30}";// 将JSON字符串转换为Java对象Person person = (jsonStr, );// 输出结果(()); // 输出:John(()); // 输出:30方法参数parseObject方法有两个主要参数: 1. JSON字符串:需要转换的JSON字符串。
2. Java对象的类型:要将JSON字符串转换为哪种类型的Java对象。
支持的类型parseObject方法支持将JSON字符串转换为以下类型的Java对象: - 基本类型:如int、float、boolean等。
- 包装类型:如Integer、Float、Boolean等。
- 字符串类型:如String、StringBuilder等。
- 数组类型:如int[]、String[]等。
- 集合类型:如List、Set等。
- 自定义类型:自定义的Java类。
字符编码JSON字符串默认使用的是UTF-8字符编码。
如果需要使用其他字符编码,可以通过charset参数进行设置:String jsonStr = "{\"name\":\"John\", \"age\":30}";// 将JSON字符串转换为Java对象,使用GBK字符编码Person person = (jsonStr, , ("GBK"));其他JSON序列化方法除了parseObject方法外,还有其他几种常见的JSON序列化方式: ### toJSONString方法toJSONString方法可以将一个Java对象转换为JSON字符串。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java 串行化技术可以使你将一个对象的状态写入一个Byte 流里,并且可以从其它地方把该Byte 流里
的数据读出来,重新构造一个相同的对象。这种机制允许你将对象通过网络进行传播,并可以随时把对象
持久化到数据库、文件等系统里。Java的串行化机制是RMI、EJB等技术的技术基础。用途:利用对象的
串行化实现保存应用程序的当前工作状态,下次再启动的时候将自动地恢复到上次执行的状态。
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的
对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时
所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,然后使用一个输出流(如:FileOutputStream)
来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)
方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
2、串行化的特点:
(1)如果某个类能够被串行化,其子类也可以被串行化。如果该类有父类,则分两种情况来考虑,如果
该父类已经实现了可串行化接口。则其父类的相应字段及属性的处理和该类相同;如果该类的父类没有实
现可串行化接口,则该类的父类所有的字段属性将不会串行化。
(2)声明为static和transient类型的成员数据不能被串行化。因为static代表类的状态, transient代表对
象的临时数据;
(3)相关的类和接口:在java.io包中提供的涉及对象的串行化的类与接口有ObjectOutput接口、
ObjectOutputStream类、ObjectInput接口、ObjectInputStream类。
(1)ObjectOutput接口:它继承DataOutput接口并且支持对象的串行化,其内的writeObject()方法
实现存储一个对象。ObjectInput接口:它继承DataInput接口并且支持对象的串行化,其内的readObject()
方法实现读取一个对象。
(2)ObjectOutputStream类:它继承OutputStream类并且实现ObjectOutput接口。利用该类来实现
将对象存储(调用ObjectOutput接口中的writeObject()方法)。ObjectInputStream类:它继承InputStream
类并且实现ObjectInput接口。利用该类来实现读取一个对象(调用ObjectInput接口中的readObject()方法)。
对于父类的处理,如果父类没有实现串行化接口,则其必须有默认的构造函数(即没有参数的构造函
数)。否则编译的时候就会报错。在反串行化的时候,默认构造函数会被调用。但是若把父类标记为可以
串行化,则在反串行化的时候,其默认构造函数不会被调用。这是为什么呢?这是因为Java 对串行化的对
象进行反串行化的时候,直接从流里获取其对象数据来生成一个对象实例,而不是通过其构造函数来完成。
import java.io.*;
public class Cat implements Serializable {
private String name;
public Cat () {
this.name = "new cat";
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
Cat cat = new Cat();
try {
FileOutputStream fos = new FileOutputStream("catDemo.out");
ObjectOutputStream oos = new ObjectOutputStream(fos);
System.out.println(" 1> " + cat.getName());
cat.setName("My Cat");
oos.writeObject(cat);
oos.close();
} catch (Exception ex) { ex.printStackTrace(); }
try {
FileInputStream fis = new FileInputStream("catDemo.out");
ObjectInputStream ois = new ObjectInputStream(fis);
cat = (Cat) ois.readObject();
System.out.println(" 2> " + cat.getName());
ois.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}//writeObject和readObject本身就是线程安全的,传输过程中是不允许被并发访问的。所以对象能一
个一个接连不断的传过来