编程开发 > JAVA > 文章内容

java基础知识总结(120)

2016-6-20编辑:ljnbset

RandomAccessFile 操作文件内容, 访问文件任意位置

 16进制:41 对应: 0100 0001 是一个字节(byte)

 一个MP3歌曲大约 5M byte, 一个5M个Byte数据组成的有序集合

 一个文件8G个Byte

  文件是byte by byte 是数据有序集合

  基本的文件访问, 基于一个byte一个byte的读写文件

  byte数据是文件的基本组成单位, 是最小的原子单位.

 1)Java 文件模型, 文件是byte by byte 是数据集合

 data   :  41 42 00 00 00 ff d6 d0  ...

 index  :   0  1  2  3  4  5  6  7  8

 pointer:   ^

 2) 打开文件, 有两种模式 "rw", "r"

  RandomAccessFile raf = new RandomAccessFile(file, "rw");

  打开文件时候默认文件指针在开头 pointer=0

 3)写入方法: raf.write(int) 将整数的"低八位"写入到文件中, 指针

  自动移动到下一个位置, 准备再次写入

  * 文件名的扩展名要明确指定, 没有默认扩展名现象!

  任务: A 在demo文件夹中创建raf.dat

       B 打开这个文件

       C 写入 'A' 和 'B'

       D 写入整数 255 占用4个byte

       E 写入GBK 编码的 '中', d6d0

    File demo = new File("demo");

    if(!demo.exists()){

      demo.mkdir();}

    File file = new File(demo, "raf.dat");

    if(! file.exists()){

      file.createNewFile();}

    RandomAccessFile raf =

      new RandomAccessFile(file,"rw");

    System.out.println(raf.getFilePointer()); //0

    raf.write('A');// 0041 -> 00000041 -> 41

    System.out.println(raf.getFilePointer());//1

    raf.write('B');

    int i = 0x7fffffff;// 7f ff ff ff

    //raf.write(i>>>24);// i>>>24 00 00 00 7f

    //raf.write(i>>>16);// i>>>16 00 00 7f ff

    //raf.write(i>>>8);//  i>>>8  00 7f ff ff

    //raf.write(i);//          i  7f ff ff ff

    raf.writeInt(i);

    String s = "中";//4e2d

    byte[] gbk = s.getBytes("gbk");

    //gbk = {d6, d0}

    raf.write(gbk);

    raf.close();

 4) 读取文件

  int b = raf.read() 从文件中读取一个byte(8位) 填充到int

  的低八位, 高24位为0, 返回值范围正数: 0~255, 如果返回-1表示

  读取到了文件末尾! 每次读取后自动移动文件指针, 准备下次读取.

   任务1: A 只读打开文件, 移动到int数据位置

         B 连续读取4个byte, 拼接为int (反序列化) 

    RandomAccessFile raf =

      new RandomAccessFile("demo/raf.dat", "r");

    int i = 0;

    raf.seek(2);//移动到int位置

    i = raf.readInt();

    System.out.println(Integer.toHexString(i));

    raf.close();      

 5) 文件读写完成以后一定关闭文件

RandomAccessFile 可以读写文件, 文件最基本的读写: read(), write()每次读写一个byte, 其他的方法(readInt()等)都是基于这两个方法实现的.文件的最基本访问方式就是 byte by byte\

RandomAccessFile 提供基本类型的序列化方法, 和反序列化方法基本类型序列化方法 : writeInt() writeLong() writeDouble()...

基本类型反序列化方法:readInt() readLong() readDouble().

读取一个文件的前提: 是对这个文件有足够清晰的了解!了解到每个byte
java基础知识总结(119)

热点推荐

登录注册
触屏版电脑版网站地图