java 内存映射文件 大文件操作
/** * 内存映射文件 * @author Administrator * */public class LargeMappedFiles {private static int length = 0x8FFFFFF;public static void main(String args[]) {try {MappedByteBuffer out = new RandomAccessFile(new File("D:\\Niotest.txt"), "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));}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
??
?? 内存映射文件上锁和部分内容上锁
??
??
/** * 文件映射 针对大文件 * 大文件部分文件加锁 * @author Administrator * */public class LockingMappedFiles {static FileChannel fc;static final int LENGTH = 0x8FFFFFF;public static void main(String args[]){try {fc = new RandomAccessFile("D:\\test.dat","rw").getChannel();MappedByteBuffer out = fc.map(FileChannel.MapMode.READ_WRITE, 0, LENGTH);for(int i = 0 ;i < LENGTH ;i++){out.put((byte)'X');}new LockAndModify(out,0,0+LENGTH/3);new LockAndModify(out,LENGTH/2,LENGTH/2+LENGTH/4);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}private static class LockAndModify extends Thread{private ByteBuffer buff;private int start,end;LockAndModify(ByteBuffer mbb,int start,int end){this.start = start;this.end = end;mbb.limit(end);mbb.position(start);//创建新缓冲区buff = mbb.slice();start();}public void run(){try {FileLock fl = fc.lock(start, end, false);System.out.println("Locked : "+start+" to "+end);while(buff.position()<buff.limit()-1){buff.put((byte)(buff.get()+1));}fl.release();System.out.println("Release : "+start+" to "+end);} catch (IOException e) {e.printStackTrace();}}}}
?