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().
读取一个文件的前提: 是对这个文件有足够清晰的了解!了解到每个byteASP编码教程:如何实现/使用缓存
[ASP]2015年4月15日ASP编码教程:asp缓存的分类
[ASP]2015年4月15日ASP编码教程:何谓ASP缓存/为什么要缓存
[ASP]2015年4月15日ASP编码教程:asp实现的sha1加密解密代码
[ASP]2015年4月15日ASP编码教程:asp执行带参数的sql语句实例
[ASP]2015年4月14日