这篇文章主要介绍了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#,感兴趣的朋友可以了解下
取消
提交评论
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。