今天工作遇到一个要把查询结果的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 ?请大家分享一下!
分享到:
相关推荐
- **序列化**:可以实现 `Serializable` 接口以支持序列化。 - **事件监听**:可以通过实现特定接口来处理事件监听。 在本例中,我们使用了一个名为 `Mysql` 的 Java Bean 来封装 MySQL 数据库备份与还原的操作。 ...
Java序列化机制是Java平台提供的一种标准方法,用于将对象的状态转换为字节序列,以便在网络中传输或存储在磁盘、数据库等持久化介质中。这一机制在分布式环境、远程通信、持久化存储和数据交换等多个场景下具有广泛...
总的来说,Java序列化是一个强大的工具,它使得对象可以在不同的时间和地点保持其状态,这对于数据存储、备份、恢复以及跨网络通信等任务具有重要意义。然而,需要注意的是,序列化可能涉及安全风险,因为它可能导致...
- **反序列化**: 将字节流还原为原来的Java对象的过程。这个过程确保对象的所有属性和状态都能正确恢复。 2. **何时需要序列化** - 存储对象到文件或数据库中,以便后续使用或备份。 - 网络传输对象,例如通过...
在Java编程中,序列化是将对象的状态转换为可存储或可传输的形式的过程,而反序列化则是将这种形式还原为对象。如果一个程序在反序列化过程中没有正确验证输入的数据,攻击者可能会构造恶意序列化数据,从而触发未...
反序列化则是将XML字符串还原为Java对象,以便在程序中使用。 首先,我们需要引入XStream库。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.thoughtworks.xstream</groupId> ...
Java提供了内置的序列化机制,只需让我们的类实现Serializable接口,就可以轻松地实现对象的序列化和反序列化。 以下是一个简单的Java示例,展示了如何将List对象序列化到文件: ```java import java.io.*; import...
1. **序列化与反序列化**:为了将对象存储到文件中,必须将其转换为字节流(序列化),而从文件加载时则需要将字节流还原为对象(反序列化)。Java提供了标准的序列化接口`java.io.Serializable`,但JFile可能提供了...
2. **ObjectInputStream**:它的作用是读取由`ObjectOutputStream`写入的字节流,并将它们还原为Java对象,实现了反序列化。 ### 序列化标识符(`serialVersionUID`) 1. **默认生成**:如果一个类没有声明`...
序列化是将Java对象转换为字节流的过程,而反序列化则是从字节流还原回对象的过程。这样,即使系统重启,我们也能恢复这些对象。 另外,"DirLister"可能是一个用于列出目录内容的类或工具,它可以帮助我们遍历文件...
读取时,使用FileInputStream和ObjectInputStream进行反序列化操作,将文件内容还原为对象列表。 4. **事件处理**: GUI中的按钮点击、文本框输入等事件,需要相应的事件处理器来响应。Java的AWT和Swing库提供了...
反序列化是将已序列化的对象状态还原为可执行对象的过程,如果这个过程没有得到适当的验证,攻击者可以构造恶意的序列化数据,导致安全问题。 为了修补这个漏洞,我们需要将WebLogic服务器中旧版本的Apache Commons...
3. **实现反序列化方法**:实现反序列化方法,将字节流还原为原始对象。 4. **注册自定义序列化器**:在定义状态时,通过`ValueStateDescriptor`的构造函数传入自定义的序列化器实例。 通过上述知识点的学习,可以...
AndroidXstream是针对Android平台的一个库,它提供了方便的方式来处理XML序列化和反序列化,即把Java对象转换为XML字符串,或者从XML字符串恢复为Java对象。这篇内容将详细讲解AndroidXstream如何解决XML与对象转换...
1. **基本序列化与反序列化**:通过`XStream.fromXML()`和`xstream.toXML()`方法,可以轻松地完成对象到XML的转换和XML到对象的还原。 2. **类型安全的序列化**:通过`xstream.allowTypes()`方法,可以指定允许序列...
反序列化则是将接收到的二进制数据还原为对象。 5. **消息协议设计**:即时通信系统需要定义一套消息协议,比如XML或JSON格式,用于封装发送和接收的消息。这包括消息头(消息类型、长度等)、消息体(实际内容)等...
XML序列化和解析则涉及到了如何将对象转换成XML格式,以及如何从XML中还原对象的过程。在Android中,`SharedPreferences`内部就是使用XML格式来存储数据的。 XML序列化通常包括两个步骤: 1. 将对象转换为XML字符串...
反序列化则是序列化的逆过程,即将字节流还原成对象。 #### 第五章:性能调优 **5.1 性能瓶颈分析** 性能瓶颈分析是识别系统性能问题的关键步骤。这通常涉及到CPU使用率、内存消耗、I/O操作等方面的数据收集和...
反序列化则将接收到的字节流还原为对象。 3. **安全通信**:为了保证信息安全,中间层可能采用SSL/TLS加密技术,实现数据的端到端加密,防止数据在传输过程中被窃取或篡改。 4. **负载均衡与分布式**:在高并发...
1. 在Android客户端,使用Json序列化本地数据,然后通过HTTP请求发送到服务器。 2. 后端SSM框架接收到请求,将Json数据解析为Java对象,存储到MySQL数据库中。 3. 当需要恢复数据时,Android客户端发起请求,服务器...