黑马程序员技术交流社区

标题: 关于RandomAccessFile中的mode问题 [打印本页]

作者: 陈腾跃_2013    时间: 2013-3-27 16:05
标题: 关于RandomAccessFile中的mode问题
本帖最后由 陈腾跃_2013 于 2013-3-27 21:03 编辑

搜索过帖子,但是其中的回答还是不知所以{:soso_e150:}

RandomAccessFile(File file,String mode)//构造函数
其中mode接受4个参数(r,rw,rwd,rws),
API中是这样描述的:
含意
"r"以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException
"rw"打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
"rws"打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
"rwd"  打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。

我不明白的细节是:
1、rwd在API中的解释比rws就是多了一个元数据,这两个有什么区别吗?
2、且“同步写入底层存储设备”是什么意思?同步是指什么(线程同步吗)?底层设备是硬盘吗?

还请亲们告诉我,谢谢。

作者: lucy198921    时间: 2013-3-27 16:15
"rws" 和 "rwd" 模式的工作方式极其类似 FileChannel 类的 force(boolean) 方法,
分别传递 true 和 false 参数,除非它们始终应用于每个 I/O 操作,并因此通常更为高效。

如果该文件位于本地存储设备上,那么当返回此类的一个方法的调用时,
可以保证由该调用对此文件所做的所有更改均被写入该设备。
这对确保在系统崩溃时不会丢失重要信息特别有用。如果该文件不在本地设备上,则无法提供这样的保证。

"rwd" 模式可用于减少执行的 I/O 操作数量。使用 "rwd" 仅要求更新要写入存储的文件的内容;
使用 "rws" 要求更新要写入的文件内容及其元数据,这通常要求至少一个以上的低级别 I/O 操作。

如果存在安全管理器,则使用 file 参数的路径名作为其参数调用它的 checkRead 方法,以查看是否允许对该文件进行读取访问。如果该模式允许写入,那么还使用该路径参数调用该安全管理器的 checkWrite 方法,以查看是否允许对该文件进行写入访问。

作者: 赵喜平    时间: 2013-3-27 16:21
"rws" 和 "rwd" 模式的工作方式极其类似 FileChannel 类的 force(boolean) 方法,分别传递 true 和 false
如果该文件位于本地存储设备上,那么当返回此类的一个方法的调用时,可以保证由该调用对此文件所做的所有更改均被写入该设备。
这对确保在系统崩溃时不会丢失重要信息特别有用。如果该文件不在本地设备上,则无法提供这样的保证。
作者: 曹睿翔    时间: 2013-3-27 16:31
"rws" 和 "rwd" 模式的如果该文件位于本地存储设备上,那么当返回此类的一个方法的调用时,可以保证由该调用对此文件所做的所有更改均被写入该设备。这对确保在系统崩溃时不会丢失重要信息特别有用。如果该文件不在本地设备上,则无法提供这样的保证。
"rwd" 模式可用于减少执行的 I/O 操作数量。使用 "rwd" 仅要求更新要写入存储的文件的内容;使用 "rws" 要求更新要写入的文件内容及其元数据,这通常要求至少一个以上的低级别 I/O 操作。

看了API,之后我这样想,跟你交流一下想法,元这个字,张老师在注解那块讲到过(定义一个b注解类,又让a这个注解类去注解b类,a就称为元注解),元数据大概就是事描述数据的数据,比如一个学生信息条,他有name、age等属性,这些就是他的元数据
根据文档来看,rwd的效率高,因为他不用去管元数据,元数据先保存到流中,把要存储的文件(比如学生的表先写进去),系统资源不紧张的时候再去刷新元数据,而rds是不停的刷新,只要数据更改,就狂刷
作者: 汪平乐    时间: 2013-3-27 18:10
呵呵...要块金币{:soso_e181:}
作者: 陈丽莉    时间: 2013-3-27 20:46
及时追问,或将帖子分类改成【已解决】~
作者: 陈腾跃_2013    时间: 2013-3-27 20:59
lucy198921 发表于 2013-3-27 16:15
"rws" 和 "rwd" 模式的工作方式极其类似 FileChannel 类的 force(boolean) 方法,
分别传递 true 和 false  ...

谢谢你的回答
作者: 陈腾跃_2013    时间: 2013-3-27 21:00
1170531562 发表于 2013-3-27 16:21
"rws" 和 "rwd" 模式的工作方式极其类似 FileChannel 类的 force(boolean) 方法,分别传递 true 和 false
...

谢谢回答哈
作者: 陈腾跃_2013    时间: 2013-3-27 21:01
曹睿翔 发表于 2013-3-27 16:31
"rws" 和 "rwd" 模式的如果该文件位于本地存储设备上,那么当返回此类的一个方法的调用时,可以保证由该调 ...

醍醐灌顶啊,谢谢,以后多多交流
作者: 陈腾跃_2013    时间: 2013-3-27 21:02
汪平乐 发表于 2013-3-27 18:10
呵呵...要块金币

呵呵,贪财贪财:handshake
作者: 陈腾跃_2013    时间: 2013-3-27 21:02
陈丽莉 发表于 2013-3-27 20:46
及时追问,或将帖子分类改成【已解决】~

谢谢“老版”提示给分:lol




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2