⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 synaccesser.java

📁 这是孙卫琴在"Java与面向对象编程"一书的源代码。
💻 JAVA
字号:
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class SynAccesser {
  static FileChannel fc;
  public static void main(String args[])throws Exception{
      final int capacity=0x800;  //2K
      fc=new RandomAccessFile("D:\\test.txt","rw")
                           .getChannel();
      MappedByteBuffer mbb=fc.map(FileChannel.MapMode.READ_WRITE,0,capacity);
      for(int i=0;i<capacity/2;i++)
        mbb.put((byte)'a');
      for(int i=capacity/2;i<capacity;i++)
        mbb.put((byte)'c');

      new Modifier(mbb,0,capacity/2);
      new Modifier(mbb,capacity/2,capacity);
  }
  
  //对文件部分区域加锁并且修改文件
  static class Modifier extends Thread{  
    private ByteBuffer buff;
    private int start,end;

    Modifier(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)); //buff.put()和buff.get()方法都会改变buff的position

         fl.release();
       }catch(IOException e){throw new RuntimeException(e);}
    }
  }
}



/****************************************************
 * 作者:孙卫琴                                     *
 * 来源:<<Java面向对象编程>>                       *
 * 技术支持网址:www.javathinker.org                *
 ***************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -