RandomAccessFile:
特点:
1,内部类封装了字节流。(输入和输出)所以可以文件进行读写操作。
2,内部有可变长度的字节数组缓冲区。
3,有一个指针在对字节数组缓冲区进行操作。
可以通过getFilePointer()获取该指针位置,也可以通过seek设置指针的位置。
该对象通过对指针的操作,可以完成从数据任意进行读写。
4,该对象只能操作文件。
5,可以完成对文件数据的随机访问,但要注意,文件的数据最好是有规律的,有固定长度间隔的。
class RandomAccessFileDemo
{
public static void main(String[] args) throws IOException
{
//readFile();
writeFile_2();
}
public static void writeFile_2()throws IOException
{
RandomAccessFile raf = new RandomAccessFile("info.txt","rw");
raf.seek(8*5);
raf.write("张撒".getBytes());
raf.writeInt(97);
raf.close();
}
//使用该对象对文件进行读取。
public static void readFile()throws IOException
{
RandomAccessFile raf = new RandomAccessFile("info.txt","r");
raf.seek(8*1);//可以随时改变指针位置。
//raf.skipBytes(8*3);//只能往前跳,不能回头。
byte[] buf = new byte[4];
raf.read(buf);
String name = new String(buf);
System.out.println("name="+name);
int age = raf.readInt();
System.out.println("age="+age);
System.out.println("index="+raf.getFilePointer());
raf.close();
}
//使用该对象将一些写入到文件中。
public static void writeFile()throws IOException
{
RandomAccessFile raf = new RandomAccessFile("info.txt","rw");
raf.write("张三".getBytes());
raf.writeInt(97);
raf.write("李四".getBytes());
raf.writeInt(99);
raf.close();
}
}
RandomAccessFile主要应用于多线程,一个大文件可以分开下载,分别用几个线程同时开始下载,指针指定下载位置,即便某一个线程下载失败,可以重新下载该片段,不用全部下载。