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


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


网站导航:
 
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿

随笔档案(14)

文章分类(18)

文章档案(18)

搜索

最新评论

阅读排行榜

评论排行榜