java中关于对象序列化和反序列化的问题!

每次new ObjectOutputStream和new ObjectIntputStream的时候总是不知道什么时候关闭流。是不是每写入/读出一个对象时就要打开/关闭一次,或者可不可以只打开一次流,然后一个个对象写进去完之后再关闭?

这项技术主要应用于RMI(对象作为参数远程传递及返回)和JavaBeans中。Java中还提供了XMLEncoder和XMDecoder类来将JavaBeans对象序列化到XML文件,但是此种方法有诸多不便对Java类有很多限制(要满足get/set方法等等,否则可能丢失该属性值)。一个很强大的开源工具XStream,也能够将对象保存到一个XML文件,并能从中恢复而且没有那么多限制。将XML作为一种进行对象传递的公共数据格式实现跨平台的进程通信。序列化和反序列化机制的强大在于能够自动处理序列化对象之间的复杂关系(对象之间的相互引用,形成了复杂的对象网,因此要保证这种关系准确无误的存储起来。)。通过反序列化获取对象的方式可以达到深度克隆对象一样的效果,当然在性能上肯定有较大损失。
满意请采纳。追问

看清楚问题

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-11-16
一般是读写完都要关闭的,但是读写极其频繁可以不关闭,下次直接拿来用,类似spring 的单例模式,对象在内存中!追问

一次读写一个对象,用循环来实现,你是这个意思吗?那我一次读写多个对象会不会有什么不同

追答

流对象一次只能处理一个的啊,不然数据不传掉啊,多个文件的话可以用多线程实现,简单点可以用线程池来实现,设置一个池子默认是几个对象,最大是几个,这样就不会资源浪费了,效率也高!

追问

那每处理一个之后都要关闭流吗?还是说只打开一个流然后一个一个处理,处理完最后关闭?

追答

不要关闭,java 中new Object 是很费资源的,如果文件处理很频繁,先new好几个对象在内存中,不销毁(这里是不关闭流),下次接着用原来的对象处理;文件处理很频繁最后也不用关闭,因为下次我们哈要用,这样文件处理效率会节约很多时间。
像数据缓存、页面缓存好多系统优化都是把一些对象预先放到内存中的,客户端请求时直接从内存中取,没有对象的初始化、数据库交互、io堵塞;时间缩短很多,只是对服务器要求高点,不过服务器一般都可以的;ps 我先睡了,有问题明天Q 我

本回答被提问者采纳

在java中什么叫序列化和反序列化?
在Java中,序列化指的是将对象的状态信息转换为字节流的过程,这些字节流可以存储到文件或数据库中,或者通过网络传输到其他机器上。反序列化则是将字节流重新转换为对象的过程。简单来说,序列化使得对象可以跨平台、跨时间地持久保存或传输。详细解释 1. 序列化:当一个对象需要被存储到硬盘上,或者通...

java中什么是序列化,怎么通俗理解序列化和反序列化?
在 Java 中,序列化是指将一个 Java 对象转换为可以存储或传输的格式的过程。这个过程通常用于持久化对象,即将对象的状态保存到文件或数据库中,或在网络上传输对象。序列化的一个关键目的是使对象能够在不同平台、不同版本的 Java 虚拟机之间进行交换或存储,而不会丢失对象的任何状态信息。反序列化...

浅谈Java对象的序列化和反序列化
java io ObjectOutputStream代表对象输出流 它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化 把得到的字节序列写到一个目标输出流中 java io ObjectInputStream代表对象输入流 它的readObject()方法从一个源输入流中读取字节序列 再把它们反序列化为一个对象 并将其返回 只有实现了Seria...

Java中的序列化与反序列化——transient(二)
transient是Java中用于标记实例变量,表示该变量在序列化过程中不需要被保存的修饰符。在反序列化时,transient变量会被赋值为其类型的默认值。使用transient关键字可阻止敏感信息在序列化后泄露。transient基本概念 transient关键字用于标记类中的实例变量,在序列化时被忽略,不会被保存在序列化的结果中。反...

在JAVA中什么叫序列化和反序列化?
java对象实现了序列化就可以以对象的形式在流中传输。不管是文件流,还是Socket流都可以 用ObjectInputStream ObjectOutputStream 来读写对象。并不是所以类都可以序列化,一般需要序列化的对象是那些实体类。什么Bean,pojo,vo貌似都是一个意思吧。。。还是有一些对象是不能序列化的,Socket对象是不能的...

简单理解序列化和反序列化
序列化和反序列化是Java SE基础中容易被忽视但至关重要的概念,它们分别负责对象的存储和恢复。序列化是将对象转换为字节序列,以便持久化存储或网络传输,通过ObjectOutputStream的writeObject方法实现。反序列化则是读取这些字节序列并重新构建对象,ObjectInputStream的readObject方法完成这一过程。对于序列化的...

什么是java的序列化和反序列化?
答案是肯定的,我们需要先将Java对象进行序列化,然后通过网络,IO进行传输,当到达目的地之后,再进行反序列化获取到我们想要的对象,最后完成通信。2、如何实现序列化 2.1、使用到JDK中关键类 ObjectOutputStream 和ObjectInputStream ObjectOutputStream 类中:通过使用writeObject(Object object) 方法,将...

对象序列化 反序列化 深层复制 关系
java中普通对象的复制,都是浅层复制,即对象内容相同,而对象不同(对象的地址)。而序列化和反序列化可以实现深层复制,达到内容和对象都相同的目的!

什么是反序列化?反序列化的过程,原理
在Java中,反序列化漏洞的一个案例是通过URLDNS构造恶意序列化数据。这个利用链中,关键环节在于`HashMap`的`readObject`方法,当解析URL对象的`hashCode`时,会触发DNS查询。通过控制URL对象的值,可以构造一个“Gadget”,即利用链,从而控制程序执行。总的来说,反序列化漏洞的根源在于,控制了序列化...

java中为什么要进行对象序列化
序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例 序列化的什么特点:如果某个类能够被...

相似回答