RandomAccessFile是Java中输入,输出流体系中功能最丰富的文件内容访问类,它提供很多方法来操作文件,包括读写支持,与普通的IO流相比,它最大的特别之处就是支持任意访问的方式,程序可以直接跳到任意地方来读写数据。

如果我们只希望访问文件的部分内容,而不是把文件从头读到尾,使用RandomAccessFile将会带来更简洁的代码以及更好的性能。下面来看下RandomAccessFile类中比较重要的2个方法,其他的和普通IO类似,在这里,就不详细说明了。方法名作用

getFilePointer()返回文件记录指针的当前位置

seek(long pos)将文件记录指针定位到pos的位置

功能one,读取任意位置的数据,代码如下publicstatic void randomRed(String path,int pointe){

try{

RandomAccessFile raf=new RandomAccessFile(path, "r");

raf.seek(pointe);//移动文件指针位置

byte[]  buff=new byte[1024];

//用于保存实际读取的字节数

int hasRead=0;

//循环读取

while((hasRead=raf.read(buff))>0){

//打印读取的内容,并将字节转为字符串输入

System.out.println(new String(buff,0,hasRead));

}

}catch(Exception e){

e.printStackTrace();

}

}至此,RandomAccessFile类的几个功能,散仙在代码中已给出实现了,现在回到本文开始前的提的那个需求,用RandomAccessFile类就可以轻而易举的完成了,另外需要注意的是,向指定位置插入数据,是散仙自己改造的功能,RandomAccessFile并不直接支持,需要新建一个缓冲区临时空间,存数据,然后在写,因为一旦数据量上了级别,在任意位置插入数据,是很耗内存的,这个也就是为什么hadoop的HDFS文件系统,只支持append的方式,而没有提供修改的操作。另外我们可以用RandomAccessFile这个类,来实现一个多线程断点下载的功能,用过下载工具的朋友们都知道,下载前都会建立两个临时文件,一个是与被下载文件大小相同的空文件,另一个是记录文件指针的位置文件,每次暂停的时候,都会保存上一次的指针,然后断点下载的时候,会继续从上一次的地方下载,从而实现断点下载或上传的功能,有兴趣的朋友们可以自己实现下。

比较Scanner和RandomAccessFile的效率,使用Scanner按行读取文件效率高好多好多倍,内存占用高一点点而已;而使用RandomAccessFile按行读取数据效率极低,推荐使用Scanner。

RandomAccessFile类。其I/O性能较之其它常用开发语言的同类性能差距甚远,严重影响程序的运行效率。

在改进之前先做一个基本测试:逐字节COPY一个12兆的文件(这里牵涉到读和写)。

读写耗用时间(秒)

RandomAccessFileRandomAccessFile95.848

BufferedInputStream + DataInputStreamBufferedOutputStream + DataOutputStream2.935

我们可以看到两者差距约32倍,RandomAccessFile也太慢了。由其源码可见,RandomAccessFile每读/写一个字节就需对磁盘进行一次I/O操作。

JAVA随机读写功能实现类_Java 实现文件随机读写-RandomAccessFile相关推荐

  1. java多个类调用,java起用多进程调用某个类(是class文件)

    java启用多进程调用某个类(是class文件) import java.io.BufferedInputStream; import java.io.BufferedReader; import j ...

  2. plist文件读写,序列化与反序列化,文件的读写[xcode4.4.1]

    这篇学习目标: plist文件读写 对象序列化与反序列化 本地文件的读写 iCloud存储的API 引言 在做iOS开发时,经常用到到plist文件,  那plist文件是什么呢? 它全名是:Prop ...

  3. linux sd卡中文件多时读写,数据存储与访问之——文件存储读写

    1.Android文件的操作模式 在java中要想对文件做读写操作,只需创建 文件,读写数据即可,Android却是不同,android基于Linux,在读写文件的时候,还需要加上文件的操作模式. 文 ...

  4. java 文件随机读取_Java 实现文件随机读写-RandomAccessFile

    现有如下的一个需求,向已存在1G数据的txt文本里末尾追加一行文字,内容如下"Lucene是一款非常优秀的全文检索库".可能大多数朋友会觉得这个需求很easy,说实话,确实easy ...

  5. java按照io流向基类_Java IO详解

    1 Java IO流的概念,分类 1.1 Java IO流的概念 java的IO是实现输入和输出的基础,可以方便的实现数据的输入和输出操作.在java中把不同的输入/输出源(键盘,文件,网络连接等)抽 ...

  6. java 8 新功能详解_Java 8和Java 14之间的新功能

    java 8 新功能详解 从版本9开始,Java每6个月就有一次新功能,因此很难跟踪这些新更改. 互联网上的大多数信息都描述了最近2个Java版本之间的变化. 但是,如果您的情况与我相似,则说明您使用 ...

  7. java 8 新功能详解_Java 8的8个新功能

    java 8 新功能详解 注意:确保还检查了我们的详细教程Java 8 Features – ULTIMATE Guide . Jdk 1.8(又名Java 8)今天发布,这意味着它的通用发布版本已经 ...

  8. java的网络功能与编程_Java的网络功能与编程(转载)

    Java的 网络 功能与编程 徐迎晓 (上海大学计算中心25#) 摘  要:Java语言是Internet上最热门的编程语言,本文针对 Java的 网络 功能,对Java从 网络 上获取图象.声音. ...

  9. java 根据类名示例化类_Java收集器类– 18个示例

    java 根据类名示例化类 Java Collectors is a utility class that provides many useful implementations of the Co ...

最新文章

  1. Android下intent的setdata、settype和setdataandtype函数
  2. vuex数据管理-数据适配
  3. 【Linux】一步一步学Linux——who命令(95)
  4. jquery --- 阻止表单默认的提交行为,标准化表单的数据
  5. springcloud云服务架构-HongHu commonservice-eureka项目构建过程
  6. 安卓案例:利用帧动画实现游戏特效
  7. 如何帮助企业把风控做得更好?
  8. Linux内核源代码分析——插入之后会发生什么?
  9. 互不侵犯king (状压dp)
  10. PDF文件有密码怎么解除?
  11. 一种传统发酵彝药有效抑制新冠病毒的复制体外研究
  12. 华为应聘进展状态码解析(附加性格测试攻略)
  13. 魔兽各服务器位置,魔兽世界怀旧服矿点分布位置介绍 全地图采矿位置一览
  14. 如何修复win7蓝牙服务器,win7系统查看蓝牙的修复办法
  15. Quartz Trigger状态转换
  16. 动态虚拟服务器,AMD展示三代Opteron间虚拟服务器动态迁移
  17. 生信识图之 点图进阶-6(UMAP)
  18. 周星驰经典对白 (不可不看哦)[转贴]
  19. SyntaxError: Non-UTF-8 code starting with ‘\xbd‘
  20. pink老师前端入门视频教程笔记(上)

热门文章

  1. 2022-2-16 MIT 6.828 实验环境安装
  2. leetcode系列-136.只出现一次的数字
  3. 顺序表的查找C语言数据结构
  4. 互动性可视化,打通大数据最后一公里
  5. 2021-07-23虚拟内存(四)页面置换算法
  6. E都市--互联网应用新概念—E都市
  7. sqlserver 创建登录名报错:‘User, group, or role ‘arms‘ already exists in the current database‘
  8. 以下哪种标签不是php起始 结束符,CIW中国网页设计师考试试题(Fireworks部分)及答案二...
  9. Raspberry Pi: WiFi设置
  10. go语言html模板,Go语言的HTML模板(多值替换)