cross gene高家宁,wishes是什么意思,珠海通奸门
在处理大文件时,如果利用普通的fileinputstream 或者fileoutputstream 抑或randomaccessfile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如下为一个对比实验。
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<1253244;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();
}
}
}
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<1253244;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();
}
}
}
这是因为内存映射文件首先将外存上的文件映射到内存中的一块连续区域,被当成一个字节数组进行处理,读写操作直接对内存进行操作,而后再将内存区域重新映射到外存文件,这就节省了中间频繁的对外存进行读写的时间,大大降低了读写时间。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
浅析我对 String、StringBuilder、StringBuffer 的理解
使用IDEA搭建SSM框架的详细教程(spring + springMVC +MyBatis)
Springboot整合freemarker 404问题解决方案
引入mybatis-plus报 Invalid bound statement错误问题的解决方法
网友评论