struts 大量文件读取的问题,因为访问量大,而且文件也大(很多都是几十M上百M),总是内存溢出。
唉!头痛死了,一小段代码改了又改,还是总内存溢出。
我的代码如下:
public static boolean readFile(HttpServletResponse response,
String filePath, String fileLoc, String fileName){
ServletOutputStream sos = null;
File myFile = null;
InputStream is = null;
myFile = new File(filePath + fileLoc);
if(myFile==null || myFile.length()<1) {
return false;
}
response.setContentType("application/octet-stream;charset=utf-8");
response.addHeader("Content-Disposition", "attachment; filename=" + fileName);
try {
sos = response.getOutputStream();
is = new FileInputStream(myFile);
int blobsize = (int) myFile.length();
byte[] blobbytes = new byte[blobsize];
int bytesRead = 0;
while ((bytesRead = is.read(blobbytes)) != -1) {
sos.write(blobbytes, 0, bytesRead);
}
sos.flush();
sos.close();
is.close();
}catch (Exception ex) {
System.out.println(ex);
try {
myFile = null;
sos.close();
sos = null;
is.close();
is = null;
}catch(IOException e) {
e.printStackTrace();
}
return false;
} finally {
try {
if(is!=null) {
myFile = null;
sos.close();
sos = null;
is.close();
is = null;
}
}catch(IOException e) {
e.printStackTrace();
}
}
return true;
}
请大家帮忙分析一下,万分感谢!
分享到:
相关推荐
同时,如果数据量大,还需要考虑内存管理,避免一次性加载大量数据导致内存溢出。 8. **用户体验**: 用户可能需要自定义导出的列、格式等,因此在前端提供一定的配置选项也是必要的。 这个"Struts2+Excel导出Demo...
1. **内存管理**:大文件上传可能导致内存溢出,因此建议使用`DiskFileItemFactory`来控制文件在磁盘上的临时存储。 2. **安全性**:防止文件名注入攻击,不要直接使用用户提供的文件名作为服务器上文件的名称。 3...
大文件上传和下载可能导致内存溢出,因此要合理设置文件的临时存储路径,以及流操作的缓冲区大小。 3. **错误处理**: 必须捕获并处理可能的异常,如文件不存在、IO错误等,提供友好的错误提示。 4. **性能优化*...
为了处理大文件上传,可能还需要使用到像Commons FileUpload这样的库,它可以处理多部分/表单数据,有效地分块读取文件,防止内存溢出。 文件下载则涉及到HTTP响应的生成。当用户请求下载一个文件时,服务器需要...
1. **临时存储**:上传的大文件通常先存储在服务器的临时目录中,避免一次性加载到内存导致内存溢出。Commons FileUpload库会自动处理这个问题。 2. **文件验证**:在保存文件之前,应验证其类型、大小和内容,防止...
然而,需要注意的是,过多使用Session会增加服务器内存开销,可能导致Session溢出,因此需要合理控制Session的使用和生命周期。 在"testStruts1_001"这个示例项目中,我们可以看到如何实际应用上述概念。项目可能...
- `FileUploadException`: 在处理文件上传时可能会抛出的异常,包括内存溢出、文件过大等问题。 - `DiskFileItemFactory`: 配置文件上传时如何在磁盘上临时存储文件,如果内存不足以存储所有文件数据。 - `...
4. **性能优化**:处理大量数据时,可能需要考虑分批读取和写入,避免一次性加载整个数据集导致内存压力过大。 5. **错误处理和异常处理**:在开发过程中,要确保捕获和处理可能出现的异常,如文件不存在、数据格式...
- 性能优化:大量数据导入时,可以考虑分批处理,避免一次性加载大量数据导致内存溢出。 - 安全性:确保上传的文件安全无病毒,防止恶意文件注入。 总之,SSH框架结合Apache POI,为Java开发者提供了一个强大且灵活...
还可以考虑分批处理,避免一次性加载过多数据导致内存溢出。 7. 讲解项目经验:选择一个最具代表性的项目,详细说明你在项目中的角色、负责的任务,以及采用的技术和解决问题的方法。重点展示你的编程能力、问题...
- 图片可能需要进行压缩处理,以减小上传数据量,防止内存溢出。可以使用`BitmapFactory`和`Bitmap.createScaledBitmap()`方法。 - 对于JPEG格式,还可以调整质量来控制文件大小。 4. **HTTP上传**: - 使用`...
内存泄露和内存溢出:内存泄露是不再使用的对象无法被垃圾回收器回收,内存溢出是程序运行过程中分配内存时空间不足。 单例:确保一个类只有一个实例,并提供一个全局访问点。 解析xml文件的几种技术:DOM、SAX、...
- **内存溢出**:当程序申请内存超过系统所能提供的最大内存时,会出现内存溢出错误。 ##### 单例 - **目的**:确保某个类只有一个实例,并提供一个全局访问点。 - **实现方式**:懒汉式、饿汉式、双重检查锁定等...
基于数据库查询的分页直接通过SQL实现,适合大数据量,减少内存占用。 【JAVA中文乱码】 解决中文乱码通常涉及字符编码设置,如文件编码、IDE编码、HTTP头编码、页面编码等。 【表单GET与POST】 GET将数据附在URL...
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。...
答:运行时异常时(JVM)java虚拟机在运行过程中发生的问题,比如:内存溢出等问题。这类异常没法要求程序员去一一捕获并抛出,一般异常是Java类库或程序员自己写的代码发生的错误,这类异常可以由我们去一一捕获并...
`ByteArrayInputStream`不适合处理大文件,因为会一次性加载到内存中,可能导致内存溢出。 #### 线程切换过程 线程切换涉及保存当前线程上下文、恢复新线程上下文等操作。 #### 集群环境中线程安全 在集群环境中...
- **内存溢出**:申请内存失败。 ##### 单例 - 单例模式确保一个类只有一个实例,并提供一个全局访问点。 ##### 解析xml文件的几种技术 - **DOM**:文档对象模型,将整个文档加载到内存中。 - **SAX**:简单API,...
- **控制读取外部输入流大小**:对于文件或网络输入流,限制其读取量以避免内存溢出。 - **循环中避免使用低性能方式拼接字符串**:使用StringBuilder或StringBuffer代替连续的字符串拼接。 - **避免使用递归**:...