所谓Java随机流就是RandomAccessFile类创建的流,RandomAccessFile类既不是InputStream类的子类,也不是OutputStream类的子类。随机流不属于IO流,支持对文件的读取和写入随机访问。当准备对一个文件进行读写操作时,创建一个指向该文件的随机流即可,这样既可以从这个流中读取文件的数据,也可以通过这个流写入数据到文件。
随机流是一种具备双向传输能力的特殊流。IO流中的各个流都只能实现单向的输入或输出操作,如果想对一个文件进行读写操作就要建立两个流。随机流 Random Access File 类创建的流既可以作为输入流,也可以作为输出流,因此建立一个随机流就可以完成读写操作。
RandomAccessFile类的定义:
构造方法:
public RandomAccessFile(File file,String mode) throws FileNotFoundException
Random Access File 类与其他流不同,它既不是 Input Stream 类的子类,也不是 Output Stream 的子类,而是 java.lang.Object 根类的子类。RandomAccessFile最大的特点实在数据的读取处理上,因为所有的数据时按照固定的长度进行的保存,所以读取的时候就可以进行跳字节读取。
主要方法:
随机流的输入和输出实例:
/*
*实现文件的保存
*/
package IODemo;
import java.io.*;
public class RandomAccessFileDemo{
public static void main(String[]args)throws Exception{
//TODO Auto-generated method stub
File file=new File("D:"+File.separator+"mldn.txt");
RandomAccessFile raf=new RandomAccessFile(file,"rw");
String[]names=new String[]{"zhangsan","wangwu","lisi"};//名字占8位
int age[]=new int[]{30,20,16};//年龄占4位
for(int x=0;x<names.length;x++){
raf.write(names[x].getBytes());
raf.writeInt(age[x]);
}
raf.close();
}
}
/*
*读取数据
*/
package IODemo;
import java.io.*;
public class RandomAccessFileDemo2{
public static void main(String[]args)throws Exception{
//TODO Auto-generated method stub
File file=new File("D:"+File.separator+"mldn.txt");
RandomAccessFile raf=new RandomAccessFile(file,"rw");
{//读取lisi数据,跳过24位
raf.skipBytes(24);
byte[]data=new byte[8];
int len=raf.read(data);
System.out.println("姓名:"+new String(data,0,len).trim()+"年龄:"+raf.readInt());
}
{//读取wangwu数据,回跳12位
raf.seek(12);
byte[]data=new byte[8];
int len=raf.read(data);
System.out.println("姓名:"+new String(data,0,len).trim()+"年龄:"+raf.readInt());
}
{//读取zhangsan数据,回跳到顶点
raf.seek(0);
byte[]data=new byte[8];
int len=raf.read(data);
System.out.println("姓名:"+new String(data,0,len).trim()+"年龄:"+raf.readInt());
}
}
}
Random Access File 类的实例对象支持对文件的随机访问。这种随机访问文件的过程可以看作是访问文件系统中的一个大型 Byte 数组,指向数组位置的隐含指针称为文件指针。输入操作从文件指针位置开始读取字节,并随着对字节的读取移动此文件指针。输出操作从文件指针位置开始写入字节,并随着对字节的写入而移动此文件指针。因此,随机流可以用于多线程文件下载或上传,为快速完成访问提供了便利。当然,Java随机流的用法还要很多,我们可以观看动力节点在线的免费视频课程,继续深入学习Java随机流。
提枪策马乘胜追击04-21 20:01
代码小兵92504-17 16:07
代码小兵98804-25 13:57
杨晶珍05-11 14:54