目前手上在做一个项目
其中涉及到 对同一文件的并发修改问题。文件中存储的内容是一条一条的,但每一条的长度不定
每次修改文件操作总是只修改其中的一条我想做到的是类似数据库中的行级锁,修改时只锁定修改的这一条,而不是锁定整个文件请问有没有方法办到。。

解决方案 »

  1.   

    在NIO中,可以对文件的指定部分加锁,而不是整个文件FileChannel.tryLock(long position, long size, boolean shared)//非阻塞FileChannel.lock(long position, long size, boolean shared)//阻塞这两个方法都返回FileLock对象,通过position和size指定具体加锁部分
    如果使用这种方法,最好将每条记录设置为定长,不然无法确定加锁位置
      

  2.   

    如果我新的记录的长度大于原来记录的长度,那么此时写的时候会不会覆盖后一条记录的开始部分?我打算用RandomAccessFile做的  不知道有没有更合适的
      

  3.   

    如果,使用固定长度的字节数,那么每条记录的长度必需小于等于 这个固定他长度数。这个没有关系,RandomAccessFile比较方便。
      

  4.   

    如果我新的记录的长度大于原来记录的长度,那么此时写的时候会不会覆盖后一条记录的开始部分?如果修改后的长度会变的话,这种方法肯定是不行的啊还是得让记录的大小固定,比如可以把所有记录的长度设定为最大的记录的长度,也就是3L说的方法2。在用文件记录数据时,一般情况下都是使用固定长度的记录,否则不能实现随机存取。就得用RandomAccessFile,因为你又要对文件,同时还要写。