• RandomAccessFile浅析


    RandomAccessFile类中的write方法有以下的注意事项:

    首先write方法每次都写入一个字节

    api中write方法如下

    public void write(int b) throws IOException {
    Object traceContext = IoTrace.fileWriteBegin(path);
    int bytesWritten = 0;
    try {
    write0(b);
    bytesWritten = 1;
    } finally {
    IoTrace.fileWriteEnd(traceContext, bytesWritten);
    }
    }

    可以看出write写入的是一个字节,如果要写入一个int型数据,java api中有writeInt方法,如下:

    public final void writeInt(int v) throws IOException {
            write((v >>> 24) & 0xFF);
            write((v >>> 16) & 0xFF);
            write((v >>>  8) & 0xFF);
            write((v >>>  0) & 0xFF);
            //written += 4;
        }

    可以看到是api中writeInt方法让然是采用单个字节写入的方法,

    v >>> 24) & 0xFF表示将高8位写入。
      
    还有一点需要注意的是java官方推荐的做法是在写入读取操作结束后应该使用close方法。
    package com.xiaoysec;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.util.Arrays;
    
    public class RandomAccessFileTest {
        /**
         * 测试RandomAccessFile
         * 
         * @param args
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
            // TODO Auto-generated method stub
            File file = new File("random");
            if (!file.exists())
                file.mkdir();
            File f2 = new File(file, "1.txt");
            if (!f2.exists())
                f2.createNewFile();
            RandomAccessFile raf = new RandomAccessFile(f2, "rw");
            raf.write('A');
            byte[] buff = new byte[] { 65, 97, 98 };
            raf.write(buff);
            System.out.println(raf.getFilePointer());
            raf.seek(0);
            byte[] b = new byte[(int) raf.length()];
            raf.read(b);
            System.out.println(Arrays.toString(b));
            for (byte c : b) {
                System.out.print(Integer.toHexString(c) + " ");
            }
            raf.close();
        }
        
    }




  • 相关阅读:
    HDOJ 1000 A + B Problem C++解法
    HDU之旅
    C++primer plus第六版课后编程题答案8.8
    C++primer plus第六版课后编程题答案8.6
    C++primer plus第六版课后编程题答案8.5
    C++primer plus第六版课后编程题答案8.3(正解)
    C语言练手自己编写学生成绩管理系统
    C_数据结构
    C---数组名作函数参数
    C---通过指针访问数组
  • 原文地址:https://www.cnblogs.com/xiaoysec/p/5187322.html
Copyright © 2020-2023  润新知