zoukankan      html  css  js  c++  java
  • 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();
        }
        
    }




  • 相关阅读:
    Java自学-JDBC execute与executeUpdate的区别
    POI 操作Word, 向Word中写入文本,图片.
    C++ 设计模式 4:行为型模式
    C++ 设计模式 3:结构型模式
    C++ 设计模式 2:创建型模式
    C++ 设计模式 1:概述
    C++ 数据结构 4:排序
    C++ 数据结构 3:树和二叉树
    C++ 数据结构 2:栈和队列
    C++ 数据结构 1:线性表
  • 原文地址:https://www.cnblogs.com/xiaoysec/p/5187322.html
Copyright © 2011-2022 走看看