java 完成内存映射文件_JAVA中的内存映射文件

importjava.io.BufferedOutputStream;

importjava.io.File;

importjava.io.FileOutputStream;

importjava.io.IOException;

importjava.io.RandomAccessFile;

importjava.nio.MappedByteBuffer;

importjava.nio.channels.FileChannel;

publicclassNIOTest {

privatestaticinttimes= 2000000;

privatestaticStringdata="#2015-5-20 14:38:00 revoke() method is invoked...\r\n";;

privatestaticbyte[]bytes=data.getBytes();

publicstaticvoidensureNewFileExist(String filename) {

File file =newFile(filename);

file.deleteOnExit();

try{

file.createNewFile();

}catch(IOException e) {

//TODOAuto-generated catch block

e.printStackTrace();

System.out.println(e.toString());

}

}

publicstaticvoidfileOutputStream(String filename)throwsIOException {

// usefileoutputstream

FileOutputStream fos =newFileOutputStream(filename);

for(inti = 0; i 

fos.write(bytes);

}

fos.flush();

fos.close();

}

publicstaticvoidbufferedOutputStream(String filename)throwsIOException {

// use BufferedOutputStream

FileOutputStream fos =newFileOutputStream(filename);

BufferedOutputStream bos =newBufferedOutputStream(fos);

for(inti = 0; i 

bos.write(bytes);

}

bos.flush();

bos.close();

fos.flush();

fos.close();

}

publicstaticvoidrandomAccessFile(String filename)throwsIOException {

// use random access file

RandomAccessFile file =newRandomAccessFile(filename,"rw");

for(inti = 0; i 

file.write(bytes);

}

file.close();

}

publicstaticvoidmappedFile(String filename)throwsIOException {

// use mapped file

// FileOutputStreamfos= new FileOutputStream(filename);

RandomAccessFile out =newRandomAccessFile(filename,"rw");

FileChannel channel = out.getChannel();

longsize = 200 * 1024 * 1024;

MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, size);

for(inti = 0; i 

buffer.put(bytes);

}

channel.close();

out.close();

}

publicstaticvoidmain(String[] args)throwsIOException {

// 1 File Output Stream

System.out.println("File Output Stream");

String filename ="./1_file_Output_Stream.txt";

ensureNewFileExist(filename);

longstart = System.currentTimeMillis();

fileOutputStream(filename);

longend = System.currentTimeMillis();

System.out.println((end - start) +" milliseconds\n");

// 2 Buffered Output Stream

System.out.println("Buffered File Output Stream");

filename ="./2_buffered_File_Output_Stream.txt";

ensureNewFileExist(filename);

start = System.currentTimeMillis();

bufferedOutputStream(filename);

end = System.currentTimeMillis();

System.out.println((end - start) +" milliseconds\n");

// 3 Random Access File

System.out.println("Random Access Output Stream");

filename ="./3_random_access_Output_Stream.txt";

ensureNewFileExist(filename);

start = System.currentTimeMillis();

randomAccessFile(filename);

end = System.currentTimeMillis();

System.out.println((end - start) +" milliseconds\n");

// 4 Mapped File

System.out.println("Mapped Output Stream");

filename ="./4_mapped_Output_Stream.txt";

ensureNewFileExist(filename);

start = System.currentTimeMillis();

mappedFile(filename);

end = System.currentTimeMillis();

System.out.println((end - start) +" milliseconds");

}

}

------------------------------------------测试结果如下:

0818b9ca8b590ca3270a3433284dd417.png

看来还是比较快的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值