I/O Memory-mapped files

Memory-mapped files allow you to create and modify files that are too big to bring into memory.
With a memory-mapped file, you can pretend that the entire file is in memory and that you can access it by simply treating it as a very large array.
/**
 * Creating a very large file using mapping
 * 
@author WPeng
 *
 * 
@since 2012-11-7
 
*/
public class LargeMappedFiles {
    
static int length = 0x8ffffff//128M
    public static void main(String[] args) throws FileNotFoundException, IOException {
        MappedByteBuffer out 
= new RandomAccessFile("test.dat""rw").getChannel().map(
                FileChannel.MapMode.READ_WRITE, 
0, length);
        
        
for(int i=0; i< length; i++){
            out.put((
byte)'x');
        }
        System.out.println(
"Finished Writing");
        
        
for(int i=length/2; i<length/2 + 6; i++){
            System.out.println((
char)out.get(i));
        }
    }

}

To do both writing and reading, we start with a RandomAccessFile, get a channel for that file.
And then call map() to produce a MppedByteBuffer, which is a particular kind of direct buffer.
Note that you must specify the starting point and the length of  the region that you want to map in the file;
this means that you have the option to map samller regions of a large file.

The file createed with the preceding program is 128M long.
which is probably larger than your OS will allow in memory at one time.
the file appears to be accessible all at once because only portions of it are brought into memory.
and other parts are swapped out.
this way a very large file(up to 2 GB) can easily be modified.
note that the file-mapping facilities of the underlying operating system are used to maximize performance.



posted on 2012-11-07 14:59 盐城小土包 阅读(164) 评论(0)  编辑  收藏 所属分类: J2EE


只有注册用户登录后才能发表评论。


网站导航:
 
<2025年1月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿

随笔档案(14)

文章分类(18)

文章档案(18)

搜索

最新评论

阅读排行榜

评论排行榜