`
bengan
  • 浏览: 203689 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java序列化备份及还原

阅读更多

今天工作遇到一个要把查询结果的List序列化保存到本地机,再上传到另外一个应用还原出原来的List再处理的功能.

序列化:在action里面

 

List list = maccount.getMonthLists(cno, startdate, enddate);
String filename = "test.obj"
if(list!=null && !list.isEmpty()){
    try{ 
        String filename=URLEncoder.encode(filename,"UTF-8");
        response.setContentType("application/x-download");
        //filename应该是编码后的(utf-8)
        response.addHeader("Content-Disposition", "attachment; filename=" + filename); 

       //此类实现了一个输出流,其中的数据被写入一个字节数组。缓冲区会随着数据的不断写入而自动增长				
        ByteArrayOutputStream baos=new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(baos); //此类将对像写入字节流
						
        Iterator item=list.iterator();
        while(item.hasNext()){
                Object obj=item.next();
                oos.writeObject(obj);
        }
        byte[] data = baos.toByteArray();//獲取對像的序列化數據
        OutputStream os = response.getOutputStream();
        os.write(data);
        os.flush();
        os.close();
        }catch(Exception se){
                log.debug(">>>>>>导出序列化对帐列表出错!");
                se.printStackTrace();
        }
}

 上面的代码实现在页面下载一个"test.obj"的文件.

 

上传"test.obj"文件还原List:

FormFile ff = frm.getUploadFile();
try{
    InputStream in = ff.getInputStream();
    ObjectInputStream s = new ObjectInputStream(in);
    boolean re=true;//是否结束读取
   while(re){
         try{
	 Object obj = (Object)s.readObject();
	 list.add(obj);
         }catch(EOFException eofe){
	log.debug("Throws EOFException 还原序列化文件时已经读到文件结束符!");
	re=false;
         }catch(Exception e){
	log.debug("IOException1");
	re=false;
	e.printStackTrace();
         }
    }
    in.close();
    s.close();
}catch(IOException ioe){
    log.debug("IOException2");
    ioe.printStackTrace();
}

 上面的代码把"test.obj"还原成list对象,有一个要注意的地方是Object obj = (Object)s.readObject();
方法会抛出一个EOFException 但是不影响程序继续运行.查了一些资料说EOFException 是表示已经读到文件或流的结束符但是读取对象(ObjectInputStream )还没有结束读取动作.

 

大家还有更好的处理方式吗?另外有什么办法避免抛出EOFException ?请大家分享一下!

0
0
分享到:
评论

相关推荐

    java jsp实现mysql备份还原 代码

    - **序列化**:可以实现 `Serializable` 接口以支持序列化。 - **事件监听**:可以通过实现特定接口来处理事件监听。 在本例中,我们使用了一个名为 `Mysql` 的 Java Bean 来封装 MySQL 数据库备份与还原的操作。 ...

    Java高级程序设计实战教程第五章-Java序列化机制.pptx

    Java序列化机制是Java平台提供的一种标准方法,用于将对象的状态转换为字节序列,以便在网络中传输或存储在磁盘、数据库等持久化介质中。这一机制在分布式环境、远程通信、持久化存储和数据交换等多个场景下具有广泛...

    java序列化

    总的来说,Java序列化是一个强大的工具,它使得对象可以在不同的时间和地点保持其状态,这对于数据存储、备份、恢复以及跨网络通信等任务具有重要意义。然而,需要注意的是,序列化可能涉及安全风险,因为它可能导致...

    24、序列化 Serializable1

    - **反序列化**: 将字节流还原为原来的Java对象的过程。这个过程确保对象的所有属性和状态都能正确恢复。 2. **何时需要序列化** - 存储对象到文件或数据库中,以便后续使用或备份。 - 网络传输对象,例如通过...

    weblogic10.36反序列化补丁

    在Java编程中,序列化是将对象的状态转换为可存储或可传输的形式的过程,而反序列化则是将这种形式还原为对象。如果一个程序在反序列化过程中没有正确验证输入的数据,攻击者可能会构造恶意序列化数据,从而触发未...

    使用XStream是实现XML与Java对象的转换(6)--持久化

    反序列化则是将XML字符串还原为Java对象,以便在程序中使用。 首先,我们需要引入XStream库。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.thoughtworks.xstream</groupId> ...

    缓存List并写入文件持久化.zip

    Java提供了内置的序列化机制,只需让我们的类实现Serializable接口,就可以轻松地实现对象的序列化和反序列化。 以下是一个简单的Java示例,展示了如何将List对象序列化到文件: ```java import java.io.*; import...

    基于java的JActor的文件持久化组件 JFile.zip

    1. **序列化与反序列化**:为了将对象存储到文件中,必须将其转换为字节流(序列化),而从文件加载时则需要将字节流还原为对象(反序列化)。Java提供了标准的序列化接口`java.io.Serializable`,但JFile可能提供了...

    jvm-int-serialization:JVM 内部 - 序列化

    2. **ObjectInputStream**:它的作用是读取由`ObjectOutputStream`写入的字节流,并将它们还原为Java对象,实现了反序列化。 ### 序列化标识符(`serialVersionUID`) 1. **默认生成**:如果一个类没有声明`...

    新建 快压 ZIP 压缩文件 .zip_java

    序列化是将Java对象转换为字节流的过程,而反序列化则是从字节流还原回对象的过程。这样,即使系统重启,我们也能恢复这些对象。 另外,"DirLister"可能是一个用于列出目录内容的类或工具,它可以帮助我们遍历文件...

    一个用java编写的通讯录

    读取时,使用FileInputStream和ObjectInputStream进行反序列化操作,将文件内容还原为对象列表。 4. **事件处理**: GUI中的按钮点击、文本框输入等事件,需要相应的事件处理器来响应。Java的AWT和Swing库提供了...

    commons-collections-3.2.2-

    反序列化是将已序列化的对象状态还原为可执行对象的过程,如果这个过程没有得到适当的验证,攻击者可以构造恶意的序列化数据,导致安全问题。 为了修补这个漏洞,我们需要将WebLogic服务器中旧版本的Apache Commons...

    FlinkForwardChina2018ApacheFlink流式应用中状态的数据结构定义升级.pdf

    3. **实现反序列化方法**:实现反序列化方法,将字节流还原为原始对象。 4. **注册自定义序列化器**:在定义状态时,通过`ValueStateDescriptor`的构造函数传入自定义的序列化器实例。 通过上述知识点的学习,可以...

    安卓Android源码——AndroidXstream(解决xml和对象转换问题).rar

    AndroidXstream是针对Android平台的一个库,它提供了方便的方式来处理XML序列化和反序列化,即把Java对象转换为XML字符串,或者从XML字符串恢复为Java对象。这篇内容将详细讲解AndroidXstream如何解决XML与对象转换...

    xstream-1.4.2

    1. **基本序列化与反序列化**:通过`XStream.fromXML()`和`xstream.toXML()`方法,可以轻松地完成对象到XML的转换和XML到对象的还原。 2. **类型安全的序列化**:通过`xstream.allowTypes()`方法,可以指定允许序列...

    基于java的防QQ即时通信系统源码

    反序列化则是将接收到的二进制数据还原为对象。 5. **消息协议设计**:即时通信系统需要定义一套消息协议,比如XML或JSON格式,用于封装发送和接收的消息。这包括消息头(消息类型、长度等)、消息体(实际内容)等...

    SmsBack:sharePreference的学习,包括xml序列化器和xml解析器的学习,以模拟短信的备份和备份短信的读取为实例进行

    XML序列化和解析则涉及到了如何将对象转换成XML格式,以及如何从XML中还原对象的过程。在Android中,`SharedPreferences`内部就是使用XML格式来存储数据的。 XML序列化通常包括两个步骤: 1. 将对象转换为XML字符串...

    构建高性能的大型分布式java应用

    反序列化则是序列化的逆过程,即将字节流还原成对象。 #### 第五章:性能调优 **5.1 性能瓶颈分析** 性能瓶颈分析是识别系统性能问题的关键步骤。这通常涉及到CPU使用率、内存消耗、I/O操作等方面的数据收集和...

    Java做的IM聊天软件中间桥接层

    反序列化则将接收到的字节流还原为对象。 3. **安全通信**:为了保证信息安全,中间层可能采用SSL/TLS加密技术,实现数据的端到端加密,防止数据在传输过程中被窃取或篡改。 4. **负载均衡与分布式**:在高并发...

    Android+Json+SSM+MySQL后台数据交互模拟云备份云恢复(源码)

    1. 在Android客户端,使用Json序列化本地数据,然后通过HTTP请求发送到服务器。 2. 后端SSM框架接收到请求,将Json数据解析为Java对象,存储到MySQL数据库中。 3. 当需要恢复数据时,Android客户端发起请求,服务器...

Global site tag (gtag.js) - Google Analytics