StandardOpenOption.APPEND是否需要搭配StandardOpenOption.WRITE使用?
关于StandardOpenOption.APPEND与WRITE的权限说明
StandardOpenOption.APPEND 不需要显式搭配 StandardOpenOption.WRITE 使用,下面给你拆解清楚:
- 官方文档注释的真实含义
文档里提到的“若文件以WRITE权限打开,字节会写入文件末尾而非开头”,这里的“以WRITE权限打开”并不是要求你显式声明
WRITE,而是因为APPEND本身就隐含了WRITE权限。当你指定APPEND作为打开选项时,底层会自动为文件添加写权限,所以不需要手动再加WRITE。
测试成功的原因
你只用APPEND就能正常运行,完全符合预期——因为APPEND已经包含了写操作的必要权限,系统会自动处理权限的关联,不需要额外声明。关于原子写入的说明
文档里提到的“多程序写时原子性取决于文件系统”,这个逻辑和是否显式加WRITE无关:不管你是写APPEND,还是WRITE+APPEND,只要是追加写入的场景,原子性都由文件系统的实现决定,和选项的组合方式没有关系。源码层面的验证
如果你翻OpenJDK的源码(比如sun.nio.fs.UnixChannelFactory或Windows相关的实现类),会发现当处理APPEND选项时,会自动将WRITE的权限位加入到打开参数中,所以显式声明WRITE属于冗余操作,但不会有问题。
内容的提问来源于stack exchange,提问作者Jin Kwon
相关产品推荐
相关产品推荐

