[二十五]JavaIO之RandomAccessFile
2018-09-18 06:36:34来源:博客园 阅读 ()
功能简介
构造方法
既然是文件随机读写,自然需要文件 内部维护了一个文件描述符 fd 还有文件的读写方式 rw |
明明只有两个构造方法 path的注释还说,如果通过文件描述符创建,path为null 此处提醒,有些注释或者API文档,他可能没及时删除,可能没及时修改,如果有的地方明显不太对劲 不要非去找证据证明他是对的,他可能就是错的,就看代码就好了,JDK的源码也是人写的,不是神丢向人间的 |
构造方法需要文件,以及读写模式这两个信息来打开文件 mode的字符串形式有如下几种,如果不对,可以看得到,如果这几种不是 imode为-1 小于0 直接抛异常了 "r" 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。
"rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
"rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
"rwd" 打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。
|
构造方法中会打开文件 文件的打开使用的是本地方法 |
RandomAccessFile逻辑原理
RandomAccessFile仅仅只能用于文件
|
RandomAccessFile 对于文件的操纵,就好像是对于一个巨大的数组进行访问一样
存在着一种类似下标索引的东西,可以叫做文件指针
至于到底怎么抽象成这个模型的,底层的实现我们不去关注,我们只关注我们看起来RandomAccessFile的样子就好
|
如上图所示,这就是RandomAccessFile访问文件的模型 可以返回这个文件的文件描述符 FileDescriptor getFD() 可以返回当前的文件指针 native long getFilePointer() 可以返回文件的长度 native long length() 还可以设置文件的长度 native void setLength(long newLength) 设置读写偏移量位置 void seek(long pos) |
setLength 为什么还能设置文件长度? 你可以理解为这是一个"动态数组"!! 假设你想要设置为newLength 长度
1. 如果这个长度小于 实际长度(length方法返回的值), 文件被截断,并且如果getFilePointer 大于newLength ,那么它将变成newLength
2. 如果 newLength大于 实际长度(length方法返回的值),则该文件将被扩展 在此情况下,未定义文件扩展部分的内容。
seek方法设置的偏移量,下一次的读写将从这个位置开始
偏移量的设置可能会超出文件末尾,这并不会改变什么
但是一旦你在这个超出文件末尾的偏移量位置写入数据,长度将会改变
|
也正是此处的这几个方法提供了随机访问的能力 |
方法简介
RandomAccessFile的神秘之处就在于它的逻辑原理 那就是呈现给我们的操作方式就像操作数组一样 他根本的读写方法,全都是本地方法 |
对于其他的readXXX 以及writeXXX方法 则是借助于基本的读写方法的情况下, 提供了对基本数据类型的支持 这一部分就相当于把DataInputStream和DataOutputStream结合起来了 而且还能够随机存取 不再对readXXX和 writeXXX方法进行介绍 如有兴趣可以对DataInput DataOutput 以及 DataInputStream和DataOutputStream 进行深入研究 |
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:线程与进程
- RandomAccessFile(),读写文件数据的API,以及复制文件操作 2019-12-05
- JavaIO流总结 2019-10-25
- javaIO——概述 2019-08-16
- Java开发笔记(一百二十五)AWT图像加工 2019-08-16
- Java断点续传(基于socket与RandomAccessFile的简单实现) 2019-05-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash