2012-05-15 4 views
0

Процесс-A записывает байты в файл данных с использованием FileOutputStream. Process-B считывает из того же файла данных, используя DataInputStream.EOFException при взаимодействии между процессами на основе файлов

Данные-файл находится на горе NFS, которая не поддерживает FileLocks так используется следующий подход:

Process-A создает файл блокировки, чтобы сообщить Process-B, что он может начать чтение файла данных. Он создает файл блокировки после того, как он сбрасывает и закрывает FileOutputStream. Process-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?

+0

Возможно, вы можете показать код, который вы используете для записи и чтения из этих потоков? –

+0

Я не вставлял какой-либо код, потому что его стандартный код ввода/вывода файлов с использованием fileoutputstream и datainputstream ничем не отличается от обычного. Выполняется только в двух разных процессах. –

+0

Возможный дубликат [EOFException - как обращаться?] (Http://stackoverflow.com/questions/18451232/eofexception-how-to-handle) – Raedwald

ответ

0

Ничего не происходит. Вы дошли до конца потока. Друг закрыл свой конец соединения. Закройте свой конец и забудьте об этом.