java常见3种文件上传速度对比和文件上传方法详细代码

摘要:
有很多方法可以用Java上传文件。最简单的是FileInputStream和FileOutputStream。这里我列出了三种常见的文件上传方法和代码,并将它们的上传速度与旧规则进行了比较。天哪,请到后面的房间去谈谈。首先,使用springMVC本机上传文件方法需要一些简单的配置,更不用说上图=Null){Stringpath=“E:/springUpload”+file.getOriginalFilename();//upload-file.transferTo;}}}longendTime=系统。当前时间毫秒();系统输出。println;return“/success”;}这里有意添加了一个时间,稍后将用于简单地比较上传时间。2.第二个玩家使用文件保存上传的文件,Transto是我认为目前最好的上传方式,也是我最喜欢的上传方式。代码简单快速。

在java里面文件上传的方式很多,最简单的依然是FileInputStream、FileOutputStream了,在这里我列举3种常见的文件上传方法代码,并比较他们的上传速度(由于代码是在本地测试,所以忽略网速的影响)

还是老规矩,大神请绕一下,里屋说话。

首先呢,使用springMVC原生上传文件方法,需要一些简单的配置,不多说,上图。

java常见3种文件上传速度对比和文件上传方法详细代码第1张

1.采用spring提供的上传文件的方法

@RequestMapping("springUpload")
    public String  springUpload(HttpServletRequest request) throws IllegalStateException, IOException
    {
         long  startTime=System.currentTimeMillis();
         //将当前上下文初始化给  CommonsMutipartResolver (多部分解析器)
        CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(
                request.getSession().getServletContext());
        //检查form中是否有enctype="multipart/form-data"
        if(multipartResolver.isMultipart(request))
        {
            //将request变成多部分request
            MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
           //获取multiRequest 中所有的文件名
            Iterator iter=multiRequest.getFileNames();
             
            while(iter.hasNext())
            {
            	
                //一次遍历所有文件
                MultipartFile file=multiRequest.getFile(iter.next().toString());
                if(file!=null)
                {
                    String path="E:/springUpload"+file.getOriginalFilename();
                    //上传
                    file.transferTo(new File(path));
                }
                 
            }
           
        }
        long  endTime=System.currentTimeMillis();
        System.out.println("Spring方法的运行时间:"+String.valueOf(endTime-startTime)+"ms");
        return "/success"; 
    }

在这里故意加一个计时,待会就用它简单的比较上传时间问题(本人暂时还没能力处理资源占用问题,所以这里也不做比较)

2.第二位选手,采用file.Transto 来保存上传的文件,这是目前我认为最好的上传方式,也是我最喜欢的上传方式,代码简单,速度快。请看下面代码。

/*
     * 采用file.Transto 来保存上传的文件
     */
    @RequestMapping("fileUpload2")
    public String  fileUpload2(@RequestParam("file") CommonsMultipartFile file) throws IOException {
         long  startTime=System.currentTimeMillis();
        System.out.println("fileName:"+file.getOriginalFilename());
        String path="E:/"+new Date().getTime()+file.getOriginalFilename();
         
        File newFile=new File(path);
        //通过CommonsMultipartFile的方法直接写文件(注意这个时候)
        file.transferTo(newFile);
        long  endTime=System.currentTimeMillis();
        System.out.println("采用file.Transto的运行时间:"+String.valueOf(endTime-startTime)+"ms");
        return "/success"; 
    }

3.第三种采用流的方式上传,这种方法在新手学习的时候经常用到,但是我并不喜欢,因为它又慢又难写,请看

@RequestMapping("fileUpload")
    public String  fileUpload(@RequestParam("file") CommonsMultipartFile file) throws IOException {
         
        //用来检测程序运行时间
        long  startTime=System.currentTimeMillis();
        System.out.println("fileName:"+file.getOriginalFilename());
         
        try {
            //获取输出流
            OutputStream os=new FileOutputStream("E:/"+new Date().getTime()+file.getOriginalFilename());
            //获取输入流 CommonsMultipartFile 中可以直接得到文件的流
            InputStream is=file.getInputStream();
            byte[] bts = new byte[1024];
            //一个一个字节的读取并写入
            while(is.read(bts)!=-1)
            {
                os.write(bts);
            }
           os.flush();
           os.close();
           is.close();
         
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        long  endTime=System.currentTimeMillis();
        System.out.println("采用流上传的方式的运行时间:"+String.valueOf(endTime-startTime)+"ms");
        return "/success"; 
    }

方法写好了,接下来,我们在本地做个简单的评测,

1.写个简单的文件上传页面

java常见3种文件上传速度对比和文件上传方法详细代码第2张

2.分别选择同一个文件,稍微大一点(我这里上传的zookeeper3.3.6的安装包,大小为11M),以区别处他们的耗时差异(最好不实用ie,很容易崩溃,亲测)

java常见3种文件上传速度对比和文件上传方法详细代码第3张

3.统计耗时,请看下图,结果一目了然。

java常见3种文件上传速度对比和文件上传方法详细代码第4张

在此补充说明一点,如果你认为采用流的方式上传慢是因为我这里内存开辟小了,可以尝试开大一点,但是依然不影响他的速度最慢的地位,如果内存开的过大,反倒影响速度。

java常见3种文件上传速度对比和文件上传方法详细代码第5张

以上内容仅供学习,如果有需要源码的,请联系我。

免责声明:文章转载自《java常见3种文件上传速度对比和文件上传方法详细代码》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇五、nginx的安装部署制作centos的U盘启动盘下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue后台(一)

一,项目准备工作 1.拿到已经是二次开发的代码, npm i , 安装依赖包 ES6模块暴露和导入复习 1. 导出方式一: 默认一次性导出 (只能有一个) export default xxx 本质: 整个模块是一个对象, 对象中有default属性, 即: {default: xxx} 2....

C# winform 登陆成功打开主form,同时关闭登陆form

设置 Application.Run(new Form1());其中form1为主窗口,然后在form1的load方法里面这样写: 代码 private void Form1_Load(object sender, EventArgs e)         {             Form f2 = new Form2();            ...

SpringBoot1.x升级SpringBoot2.x踩坑之文件上传大小限制

SpringBoot1.x升级SpringBoot2.x踩坑之文件上传大小限制 前言 LZ最近升级SpringBoo框架到2.1.6,踩了一些坑,这里介绍的是文件上传大小限制。 升级前 #文件上传配置 1.5.9 spring: http: multipart: enabled: tr...

Flask(三)

一.wtforms 安装:pip3 install wtforms 用法一: from flask import Flask, render_template, request, redirect from wtforms import Form from wtforms.fields import simple from wtforms import v...

bootstrap-table:操作栏点击编辑按钮弹出模态框修改数据

核心代码: columns: [ { checkbox:true //第一列显示复选框 },                  ......

Django数据操作F和Q、model多对多操作、Django中间件、信号、读数据库里的数据实现分页

models.tb.objects.all().using('default'),根据using来指定在哪个库里查询,default是settings中配置的数据库的连接名称。 外话:django中引入现成数据库 Django引入外部数据库还是比较方便的,步骤如下 创建一个项目,修改seting文件,在setting里面设置你要连接的数据库类型和连接名称,...