`

struts 大量文件读取的问题,因为访问量大,而且文件也大,总是内存溢出。

阅读更多
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;
	}


请大家帮忙分析一下,万分感谢!
1
1
分享到:
评论
5 楼 bluesummer 2011-06-18  
超级潜水员 写道
服了博主,缓冲区要固定大小,晕!!! 一菜鸟

请问我如何解决啊?我真是菜鸟一个。
4 楼 绿生2009 2009-11-09  
这个算不算 PermGen Space OutOfMemory,需要另外设定JAVA_OPTS环境变量来改变缓存大小?
3 楼 tuoxie007 2009-11-08  
缓存固定大小,读一点写一点
2 楼 超级潜水员 2009-11-07  
服了博主,缓冲区要固定大小,晕!!! 一菜鸟
1 楼 mycybyb 2009-11-07  
int blobsize = (int) myFile.length(); 
byte[] blobbytes = new byte[blobsize];

这两句就注定要出问题。

相关推荐

    Struts2+Excel导出Demo,测试可用带JAR包

    同时,如果数据量大,还需要考虑内存管理,避免一次性加载大量数据导致内存溢出。 8. **用户体验**: 用户可能需要自定义导出的列、格式等,因此在前端提供一定的配置选项也是必要的。 这个"Struts2+Excel导出Demo...

    Struts上传下载

    1. **内存管理**:大文件上传可能导致内存溢出,因此建议使用`DiskFileItemFactory`来控制文件在磁盘上的临时存储。 2. **安全性**:防止文件名注入攻击,不要直接使用用户提供的文件名作为服务器上文件的名称。 3...

    struts上传和下载源码

    大文件上传和下载可能导致内存溢出,因此要合理设置文件的临时存储路径,以及流操作的缓冲区大小。 3. **错误处理**: 必须捕获并处理可能的异常,如文件不存在、IO错误等,提供友好的错误提示。 4. **性能优化*...

    文件服务器

    为了处理大文件上传,可能还需要使用到像Commons FileUpload这样的库,它可以处理多部分/表单数据,有效地分块读取文件,防止内存溢出。 文件下载则涉及到HTTP响应的生成。当用户请求下载一个文件时,服务器需要...

    java上传视频音频图片总结

    1. **临时存储**:上传的大文件通常先存储在服务器的临时目录中,避免一次性加载到内存导致内存溢出。Commons FileUpload库会自动处理这个问题。 2. **文件验证**:在保存文件之前,应验证其类型、大小和内容,防止...

    struts1.2增删改查分页Filter Session

    然而,需要注意的是,过多使用Session会增加服务器内存开销,可能导致Session溢出,因此需要合理控制Session的使用和生命周期。 在"testStruts1_001"这个示例项目中,我们可以看到如何实际应用上述概念。项目可能...

    commons-fileupload-1.2.jar和commons-io-1.3.2.jar

    - `FileUploadException`: 在处理文件上传时可能会抛出的异常,包括内存溢出、文件过大等问题。 - `DiskFileItemFactory`: 配置文件上传时如何在磁盘上临时存储文件,如果内存不足以存储所有文件数据。 - `...

    jxl从数据库导出到excel工具包

    4. **性能优化**:处理大量数据时,可能需要考虑分批读取和写入,避免一次性加载整个数据集导致内存压力过大。 5. **错误处理和异常处理**:在开发过程中,要确保捕获和处理可能出现的异常,如文件不存在、数据格式...

    ssh整合poi导入导出Excel

    - 性能优化:大量数据导入时,可以考虑分批处理,避免一次性加载大量数据导致内存溢出。 - 安全性:确保上传的文件安全无病毒,防止恶意文件注入。 总之,SSH框架结合Apache POI,为Java开发者提供了一个强大且灵活...

    java程序员面试题(银河创想).pdf,这是一份不错的文件

    还可以考虑分批处理,避免一次性加载过多数据导致内存溢出。 7. 讲解项目经验:选择一个最具代表性的项目,详细说明你在项目中的角色、负责的任务,以及采用的技术和解决问题的方法。重点展示你的编程能力、问题...

    android上传照片到服务器

    - 图片可能需要进行压缩处理,以减小上传数据量,防止内存溢出。可以使用`BitmapFactory`和`Bitmap.createScaledBitmap()`方法。 - 对于JPEG格式,还可以调整质量来控制文件大小。 4. **HTTP上传**: - 使用`...

    java必备知识点大全.pdf

    内存泄露和内存溢出:内存泄露是不再使用的对象无法被垃圾回收器回收,内存溢出是程序运行过程中分配内存时空间不足。 单例:确保一个类只有一个实例,并提供一个全局访问点。 解析xml文件的几种技术:DOM、SAX、...

    java面试知识

    - **内存溢出**:当程序申请内存超过系统所能提供的最大内存时,会出现内存溢出错误。 ##### 单例 - **目的**:确保某个类只有一个实例,并提供一个全局访问点。 - **实现方式**:懒汉式、饿汉式、双重检查锁定等...

    中科软JAVA面试题

    基于数据库查询的分页直接通过SQL实现,适合大数据量,减少内存占用。 【JAVA中文乱码】 解决中文乱码通常涉及字符编码设置,如文件编码、IDE编码、HTTP头编码、页面编码等。 【表单GET与POST】 GET将数据附在URL...

    超级有影响力霸气的Java面试题大全文档

     forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。...

    java面试题

    答:运行时异常时(JVM)java虚拟机在运行过程中发生的问题,比如:内存溢出等问题。这类异常没法要求程序员去一一捕获并抛出,一般异常是Java类库或程序员自己写的代码发生的错误,这类异常可以由我们去一一捕获并...

    中级程序员必备面试题.txt

    `ByteArrayInputStream`不适合处理大文件,因为会一次性加载到内存中,可能导致内存溢出。 #### 线程切换过程 线程切换涉及保存当前线程上下文、恢复新线程上下文等操作。 #### 集群环境中线程安全 在集群环境中...

    自整理Java关于基础和框架的面试题

    - **内存溢出**:申请内存失败。 ##### 单例 - 单例模式确保一个类只有一个实例,并提供一个全局访问点。 ##### 解析xml文件的几种技术 - **DOM**:文档对象模型,将整个文档加载到内存中。 - **SAX**:简单API,...

    Java安全与质量编码规范

    - **控制读取外部输入流大小**:对于文件或网络输入流,限制其读取量以避免内存溢出。 - **循环中避免使用低性能方式拼接字符串**:使用StringBuilder或StringBuffer代替连续的字符串拼接。 - **避免使用递归**:...

Global site tag (gtag.js) - Google Analytics