关于Java中 RadndomAccessFile的一些使用心得

     最近做一个小项目需要用到RandomAccessFile这个类 这里讲讲一些经验.

    分为读写两部分:

    读: 用到里面的Seek(); ReadInt(); ReadChar();
    其中Seek是指定位当前文件流指针的位置.
    好比如你的文件中都是Int类型的数据,如 1567 这里有四个 分别是1 5 6 7
    你想直接读出5 就要Seek(4) 然后调用ReadInt()函数.
    Ps: 真实文件中1567这四个数据不是这样简单排放的 这里只是简化.
   
    这里Int Float类型都是4字节 所以Seek(4) Double类型是8字节 Char类型是2字节.
   
    这里谈谈一个特殊类型 String
    我往文件中写一个String的时候需要定长 所以先用一个StringBuffer来存储数据
    如:

    

		  StringBuffer s = new StringBuffer(new String("Example"));   
		  s.setLength(20);   //定长为20   
		  //然后写入到文件中.

 
    这里一个定长为20意思是 s最多可以容纳20个char 而每个char的长度是2字节 所以不管s填充了多少个char.
    这里s的长度就是40字节.
    所以如果你文件中数据的排列是int string(写入时候定长20) double
    你要读取double的数据 则需要Seek(44) (4+40).
    而读取定长为20的string. 因为函数有限,只能这样.

  StringBuffer tempString = new StringBuffer();
			for (int j = 0; j < 20; ++j)
			{
				tempString.append(raf.readChar());
			}
			return tempString.toString().trim();


  用1个StringBuffer先把字符一个一个加进来 再处理.
   
  写方面相对简单,用到的函数是: Seek(); WriteChars(); WriteInt();
  基本就是用Seek定位 然后调用对应的写函数即可.
  
  不管是读还是写, 执行一个读写函数指针的位置都会移动到读或者写这个数据的后面.
  如 Seek(0); ReadInt();
  此时指针的位置就是4.
  
  不管读还是写 Seek()函数 做好数据定位是关键.
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值