首页 > 其他分享 >随机文件访问RandomAccessFile

随机文件访问RandomAccessFile

时间:2023-10-03 10:33:41浏览次数:34  
标签:文件 字节 访问 int 读写 写入 RandomAccessFile 随机

RandomAccessFile 是 Java 标准库中提供的一个文件访问类,可以用于读取和写入文件。与其他输入/输出流不同,RandomAccessFile 允许直接访问文件的任意位置,可以在文件中随机定位读写数据。

 

为什么使用它而不是传统的IO流:

 1.RandomAccessFile 允许直接跳转到文件的任意位置进行读写操作,而一般的 IO 流只能顺序读取或写入文件,也就是其seek方法,可以将文件的读写指针放到文件的任意合法位置,这在某些场景下是必要的,比如文件的断点下载,当用户下载某大型文件时,下载到一半突然机器停电了,那么用户的需求是重新下载该文件时可以从上一次的地方继续下载,这就需要一个实时的变量专门记录用户上一次下载的地方到了哪,然后再重新将文件的读写指针定位到这个变量的位置,就实现了断点下载,传统的IO流面对这样的场景将会很麻烦。

2.可以比传统的IO流更高效的读取文件。

 

构造:

new RandomAccessFile(File file,String mode)即可,file是想要读或写的文件路径,mode是模式,可选项有:

r(只读)、

rw(读写)、

rws(读写,并且相对于"rw"模式,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备)、

rwd(读写,并且相对于"rw"模式,还要求对文件内容的每个更新都同步写入到底层存储设备。)

 

常用方法:

int read(),读到最后一个字节之后没字节可读了会返回-1,正常返回的是读到字节的整形变量。

read(byte b[], int off, int len) throws IOException:从此文件中读取最多len个字节的数据到一个字节数组中,off指定从数组的哪里开始写。

write(byte b[], int off, int len) throws IOException:将指定字节数组中的len个字节从off写入文件。

write(byte i); 

void seek(long pos) throws IOException:调用本地方法seek(long pos)设置文件指针偏移量,从该文件的开头开始测量,在该位置发生下一次读取或写入。 偏移量可能设置在文件末尾之外。

设置超出文件末尾的偏移量不会改变文件长度。 只有在将偏移量设置为超出文件末尾之后,文件长度才会更改;

 

注意事项:最好不要通过 for循环或while循环 和 write(byte i) 方法来 一个一个向目标文件写数据,因为这是字节流的写入方式,会形成乱码,如果确实需要 一个字节一个字节的写入目标文件,那么通过 write(byte b[], int off, int len) throws IOException,然后读一个字节到b中,再立马写入目标文件即可。

标签:文件,字节,访问,int,读写,写入,RandomAccessFile,随机
From: https://www.cnblogs.com/xialang/p/17740859.html

相关文章

  • 聊聊基于Alink库的随机森林模型
    概述随机森林(RandomForest)是一种集成学习(EnsembleLearning)方法,通过构建多个决策树并汇总其预测结果来完成分类或回归任务。每棵决策树的构建过程中都引入了随机性,包括数据采样和特征选择的随机性。随机森林的基本原理可以概括如下:随机抽样训练集:随机森林通过有放回抽样(Boots......
  • Windows 10 同时使用WiFi(访问internet), 使用有线网卡访问校园网
    设备和网络情况一台安装有windows10的笔记本电脑笔记本有100-base-T有线网卡,接入172.27.64.1/18(255.255.192.0)的校园网9172.16.0.0/12,202.118.80.0/20)笔记本有wifi网卡,用其接入手机共享出的wifi热点两个网卡同时启动时,ip地址如下:有线网卡(Manualip):172.27.125.1......
  • 内网穿透:实现远程访问和测试内部网络的关键技术
    ......
  • 有向图访问计数
    现有一个有向图,其中包含n个节点,节点编号从0到n-1。此外,该图还包含了n条有向边。给你一个下标从0开始的数组edges,其中edges[i]表示存在一条从节点i到节点edges[i]的边。你从节点x开始,通过边访问其他节点,直到你在此过程中再次访问到之前已经访问过的节点。......
  • 访问者模式
    访问者模式案例引入要求1.将观众分为男生和女生,对歌手进行评价,当看完某个歌手表演后,对于歌手有不同的评价(评价的类别,有成功,失败等)。传统方式实现思路创建一个Person类,其有两个子类,分别是Man和WoMan,使用ifelse分支,去判断一个歌手的评价,成功对应成功分支,失败对应失败分支。......
  • C++中悬垂指针(delete后指针)仍然可以访问所指内存的问题
    C++中悬垂指针(delete后指针)仍然可以访问所指内存的问题在指针被delete之后,此时指针被称为空悬指针或者悬垂指针,即指向一块曾经保存数据对象,但现在已经无效的内存的指针。在C++编程中,当我们delete一个指针后,指针所指向的堆地址空间便被释放,指针值变成无效,该内存可以用于之后的内......
  • redis key 被访问后不会自动延长过期时间
    Redis的过期策略按照两个维度工作:被动过期和主动过期。被动过期:只有当有客户端尝试访问一个已经过期的key时,Redis才会删除该内容。主动过期:为了防止过期的key未被立即清理,造成内存浪费,Redis会周期性地随机检查一些key是否已经过期,如果过期,则予以删除。Redis的过期时间是静态的,......
  • nginx配置kibana访问用户名和密码认证、及无认证访问配置
    转载请注明出处:在nginx上配置kibana页面访问时,默认是采用kibana的认证,一般直接安装kibana后,是没有用户名和密码认证的。如果要在负载均衡上配置反向代理和用户认证,可按以下步骤进行配置:1.安装Nginx:首先,确保已经安装了Nginx,并且可以正常访问Kibana页面。2.生......
  • 微服务的设计涉及表的访问基本原则
    微服务的设计涉及表的访问基本原则1.微服务设计上是高于独立模块,提供服务能力的接口设计。多个微服务之间,如果涉及到访问同一个数据表的访问,更多的考虑将该表的sqlmapdao层的代码归结到某个具体的服务中,而不是在多个服务中都提供一套相同的代码,不便于表的管理。(高内聚,低耦合)其......
  • 构造随机树
    #include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1000001; //N=点数+1intn,p[N];structEdge{ inta,b;}e[N];intrandi(intP){ intres=(((rand()<<15ll)|rand())); returnres%P+1;}......