Java中使用内存映射实现大文件上传实例

这篇文章主要介绍了Java中使用内存映射实现大文件上传实例,本文对比测试了FileInputStream 或者FileOutputStream 抑或RandomAccessFile的频繁读写操作,最后总结出映射到内存后进行读写以提高速度,需要的朋友可以参考下

在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如下为一个对比实验。

复制代码 代码如下:

package test; import java.io.BufferedInputStream; 

import java.io.FileInputStream; 

import java.io.FileNotFoundException; 

import java.io.IOException; 

import java.io.RandomAccessFile; 

import java.nio.MappedByteBuffer; 

import java.nio.channels.FileChannel; 

public class Test { 

    public static void main(String[] args) { 

        try { 

            FileInputStream fis=new FileInputStream("/home/tobacco/test/res.txt"); 

            int sum=0; 

            int n; 

            long t1=System.currentTimeMillis(); 

            try { 

                while((n=fis.read())>=0){ 

                    sum+=n; 

                } 

            } catch (IOException e) { 

                // Todo Auto-generated catch block 

                e.printstacktrace(); 

            } 

            long t=System.currentTimeMillis()-t1; 

            System.out.println("sum:"+sum+"  time:"+t); 

        } catch (FileNotFoundException e) { 

            // Todo Auto-generated catch block 

            e.printstacktrace(); 

        } 

        try { 

            FileInputStream fis=new FileInputStream("/home/tobacco/test/res.txt"); 

            BufferedInputStream bis=new BufferedInputStream(fis); 

            int sum=0; 

            int n; 

            long t1=System.currentTimeMillis(); 

            try { 

                while((n=bis.read())>=0){ 

                    sum+=n; 

                } 

            } catch (IOException e) { 

                // Todo Auto-generated catch block 

                e.printstacktrace(); 

            } 

            long t=System.currentTimeMillis()-t1; 

            System.out.println("sum:"+sum+"  time:"+t); 

        } catch (FileNotFoundException e) { 

            // Todo Auto-generated catch block 

            e.printstacktrace(); 

        } 

        MappedByteBuffer buffer=null; 

        try { 

            buffer=new RandomAccessFile("/home/tobacco/test/res.txt","rw").getChannel().map(FileChannel.MapMode.READ_WRITE, 0, 1253244); 

            int sum=0; 

            int n; 

            long t1=System.currentTimeMillis(); 

            for(int i=0;i                 n=0x000000ff&buffer.get(i); 

                sum+=n; 

            } 

            long t=System.currentTimeMillis()-t1; 

            System.out.println("sum:"+sum+"  time:"+t); 

        } catch (FileNotFoundException e) { 

            // Todo Auto-generated catch block 

            e.printstacktrace(); 

        } catch (IOException e) { 

            // Todo Auto-generated catch block 

            e.printstacktrace(); 

        } 

    } 

}

上一篇:spring cloud consul使用ip注册服务的方法示例下一篇解决java main函数中的args数组传值问题 热门搜索

java实例 

使用实例 

java实现文件拷贝 

实现上传 

实体映射 

相关文章

Java中使用内存映射实现大文件上传实例

2021-10-06阅读(7084)评论(0)推荐()

这篇文章主要介绍了Java中使用内存映射实现大文件上传实例,本文对比测试了FileInputStream 或者FileOutputStream 抑或Random...

Java中用内存映射处理大文件的实现代码

2021-10-19阅读(8838)评论(0)推荐()

下面小编就为大家带来一篇Java中用内存映射处理大文件的实现代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Python使用mmap实现内存映射文件操作

2021-11-03阅读(8863)评论(0)推荐()

内存映射通常可以提高I/O性能,本文主要介绍了Python使用mmap实现内存映射文件操作,分享给大家,感兴趣的可以了解一下

java  深入理解内存映射文件原理

2021-10-14阅读(4968)评论(0)推荐()

这篇文章主要介绍了java 深入理解内存映射文件原理的相关资料,虚拟内存与内存映射文件的区别与联系,内存映射文件的原理和效率,需要的朋友可以参考下

Java内存映射 大文件轻松处理

2021-09-19阅读(8929)评论(0)推荐()

这篇文章主要介绍了Java内存映射 大文件轻松处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Delphi 中内存映射对于大文件的使用

2021-09-10阅读(9328)评论(0)推荐()

这篇文章主要介绍了Delphi 中内存映射对于大文件的使用的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下

c# 通过内存映射实现文件共享内存的示例代码

2021-11-04阅读(3972)评论(0)推荐()

这篇文章主要介绍了c# 通过内存映射实现文件共享内存的示例代码,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下

取消

有人回复邮件通知

提交评论

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...