详解Java随机流 - 极悦
首页 课程 师资 教程 报名

详解Java随机流

  • 2020-12-04 17:54:54
  • 1066次 极悦

RandomAccessFile类创建的流称作java随机流,RandomAccessFile类既不是InputStream类的子类,也不是OutputStream类的子类。随机流不属于IO流,支持对文件的读取和写入随机访问。当准备对一个文件进行读写操作时,创建一个指向该文件的随机流即可,这样既可以从这个流中读取文件的数据,也可以通过这个流写入数据到文件。

 

随机流是一种具备双向传输能力的特殊流。IO流中的各个流都只能实现单向的输入或输出操作,如果想对一个文件进行读写操作就要建立两个流。随机流 Random Access File 类创建的流既可以作为输入流,也可以作为输出流,因此建立一个随机流就可以完成读写操作。


RandomAccessFile类的定义:

public class RandomAccessFile extends Object

implements DataOutput, DataInput, Closeable


构造方法:

public RandomAccessFile(File file,String mode) throws FileNotFoundException

 

Random Access File 类与其他流不同,它既不是 Input Stream 类的子类,也不是 Output Stream 的子类,而是 java.lang.Object 根类的子类。RandomAccessFile最大的特点实在数据的读取处理上,因为所有的数据时按照固定的长度进行的保存,所以读取的时候就可以进行跳字节读取。

主要方法:

public int skipBytes(int n) throws IOException//向下跳

public void seek(long pos) throws IOException//向回跳

 

随机流的输入和输出实例:

/*

 * 实现文件的保存

 */

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吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交