黑马程序员技术交流社区
标题:
RondomAcessFile的一个疑惑
[打印本页]
作者:
Stephen_Chow
时间:
2013-10-26 17:31
标题:
RondomAcessFile的一个疑惑
本帖最后由 Stephen_Chow 于 2013-10-30 12:01 编辑
在毕老师的视频中讲到RanomAcessFile 说道,可以随机读取访问文件,并举了例子,但举的例子都是有规律的:例如存一个姓名,年龄,接着犹存姓名,年龄。所以读取的时候,用指针很方便,可以设置指针的位置。(读第n个就是。seek(8*n)).
我有一个疑问:如果存取的数据很没有规律,随便存取,很复杂又很多,那么读取不就会相当麻烦了吗,在实际开发中是怎么运用的,或是咋么解决的这个问题。哪位大哥哥大姐姐帮个忙噻。
import java.io.*;
/*
RandomAccessFile
该类不是算是IO体系中子类。
而是直接继承自Object。
但是它是IO包中成员。因为它具备读和写功能。
内部封装了一个数组,而且通过指针对数组的元素进行操作。
可以通过getFilePointer获取指针位置,
同时可以通过seek改变指针的位置。
其实完成读写的原理就是内部封装了字节输入流和输出流。
通过构造函数可以看出,该类只能操作文件。
而且操作文件还有模式:只读r,,读写rw等。
如果模式为只读 r。不会创建文件。会去读取一个已存在文件,如果该文件不存在,则会出现异常。
如果模式rw。操作的文件不存在,会自动创建。如果存则不会覆盖。
*/
class RandomAccessFileDemo
{
public static void main(String[] args) throws IOException
{
//writeFile_2();
//readFile();
//System.out.println(Integer.toBinaryString(258));
}
public static void readFile()throws IOException
{
RandomAccessFile raf = new RandomAccessFile("ran.txt","r");
//调整对象中指针。
//raf.seek(8*1);
//跳过指定的字节数
raf.skipBytes(8);
byte[] buf = new byte[4];
raf.read(buf);
String name = new String(buf);
int age = raf.readInt();
System.out.println("name="+name);
System.out.println("age="+age);
raf.close();
}
public static void writeFile_2()throws IOException
{
RandomAccessFile raf = new RandomAccessFile("ran.txt","rw");
raf.seek(8*0);
raf.write("周期".getBytes());
raf.writeInt(103);
raf.close();
}
public static void writeFile()throws IOException
{
RandomAccessFile raf = new RandomAccessFile("ran.txt","rw");
raf.write("李四".getBytes());
raf.writeInt(97);
raf.write("王五".getBytes());
raf.writeInt(99);
raf.close();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2