六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 19|回复: 0

java序列化备份及还原

[复制链接]

升级  27.33%

21

主题

21

主题

21

主题

秀才

Rank: 2

积分
91
 楼主| 发表于 2013-1-28 19:47:45 | 显示全部楼层 |阅读模式
今天工作遇到一个要把查询结果的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 ?请大家分享一下!
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表