Java/Unix:如果另一个进程试图在两者之间读取文件,那么一个进程能否成功地写入该文件



场景(JAVA/UNIX(:

进程A将文件写入磁盘(使用FileOutputStream(

进程B试图读取相同的文件,而进程A仍在写入(使用FileInputStream(

问题:

  • 即使进程B尝试读取,进程A是否能够成功将文件写入磁盘
  • 流程B中发生了什么?文件被锁定了吗?是否引发IOException?或者它能读取不完整的文件吗
  1. 即使进程B尝试读取,进程A是否能够成功将文件写入磁盘

是。它将能够正确地写入文件。读取不会干扰写入。。。在Linux上。

  1. 流程B中发生了什么?文件被锁定了吗?是否引发IOException?或者它能读取不完整的文件吗

它可能会看到一个不完整的文件。(如果你幸运的话,它可能会看到一个完整的文件。(

Linux默认情况下不会锁定文件。要获得锁定,读取器和编写器都需要进行flock(2)系统调用。在Java中,映射为使用FileLock

在UNIX/Linux/MacOS上不会抛出JavaIOException。(或者在安卓系统上。(你只会在Windows上遇到锁定问题。


欢迎任何提示。

提示:你可以写一个小测试程序并尝试一下。。。。

最新更新