プロセス A は、FileOutputStream を使用してデータ ファイルにバイトを書き込みます。プロセス B は、DataInputStream を使用して同じデータ ファイルから読み取ります。
データ ファイルは、FileLocks をサポートしない NFS マウント上に存在するため、次のアプローチが使用されます。
プロセス A はロック ファイルを作成して、データ ファイルの読み取りを開始できることをプロセス B に通知します。FileOutputStream をフラッシュして閉じた後、ロック ファイルを作成します。プロセス B は、ロック ファイルが存在するかどうかを確認し、データ ファイルの読み取りを開始します。ただし、ときどき EOFException が発生します。
java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:180)
at java.io.DataInputStream.readUTF(DataInputStream.java:592)
at java.io.DataInputStream.readUTF(DataInputStream.java:547)
java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:375)
at java.io.DataInputStream.readFloat(DataInputStream.java:429)
誰かが説明できますか、何がうまくいかないのですか? また、FileLock API を使用できないことを考えると、他の代替アプローチはありますか?