黑马程序员技术交流社区

标题: RondomAcessFile的一个疑惑 [打印本页]

作者: Stephen_Chow    时间: 2013-10-26 17:31
标题: RondomAcessFile的一个疑惑
本帖最后由 Stephen_Chow 于 2013-10-30 12:01 编辑

在毕老师的视频中讲到RanomAcessFile 说道,可以随机读取访问文件,并举了例子,但举的例子都是有规律的:例如存一个姓名,年龄,接着犹存姓名,年龄。所以读取的时候,用指针很方便,可以设置指针的位置。(读第n个就是。seek(8*n)).
我有一个疑问:如果存取的数据很没有规律,随便存取,很复杂又很多,那么读取不就会相当麻烦了吗,在实际开发中是怎么运用的,或是咋么解决的这个问题。哪位大哥哥大姐姐帮个忙噻。
  1. import java.io.*;


  2. /*
  3. RandomAccessFile

  4. 该类不是算是IO体系中子类。
  5. 而是直接继承自Object。

  6. 但是它是IO包中成员。因为它具备读和写功能。
  7. 内部封装了一个数组,而且通过指针对数组的元素进行操作。
  8. 可以通过getFilePointer获取指针位置,
  9. 同时可以通过seek改变指针的位置。


  10. 其实完成读写的原理就是内部封装了字节输入流和输出流。

  11. 通过构造函数可以看出,该类只能操作文件。
  12. 而且操作文件还有模式:只读r,,读写rw等。

  13. 如果模式为只读 r。不会创建文件。会去读取一个已存在文件,如果该文件不存在,则会出现异常。
  14. 如果模式rw。操作的文件不存在,会自动创建。如果存则不会覆盖。

  15. */
  16. class RandomAccessFileDemo
  17. {
  18.         public static void main(String[] args) throws IOException
  19.         {
  20.                 //writeFile_2();
  21.                 //readFile();

  22.                 //System.out.println(Integer.toBinaryString(258));

  23.         }

  24.         public static void readFile()throws IOException
  25.         {
  26.                 RandomAccessFile raf = new RandomAccessFile("ran.txt","r");
  27.                
  28.                 //调整对象中指针。
  29.                 //raf.seek(8*1);

  30.                 //跳过指定的字节数
  31.                 raf.skipBytes(8);

  32.                 byte[] buf = new byte[4];

  33.                 raf.read(buf);

  34.                 String name = new String(buf);

  35.                 int age = raf.readInt();


  36.                 System.out.println("name="+name);
  37.                 System.out.println("age="+age);

  38.                 raf.close();


  39.         }

  40.         public static void writeFile_2()throws IOException
  41.         {
  42.                 RandomAccessFile raf = new RandomAccessFile("ran.txt","rw");
  43.                 raf.seek(8*0);
  44.                 raf.write("周期".getBytes());
  45.                 raf.writeInt(103);

  46.                 raf.close();
  47.         }

  48.         public static void writeFile()throws IOException
  49.         {
  50.                 RandomAccessFile raf = new RandomAccessFile("ran.txt","rw");

  51.                 raf.write("李四".getBytes());
  52.                 raf.writeInt(97);
  53.                 raf.write("王五".getBytes());
  54.                 raf.writeInt(99);

  55.                 raf.close();
  56.         }
  57. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2