2009-01-20 10 views
2

J'ai reçu l'exception suivante lorsque j'essaie de rechercher un fichier.Exception EOF mystérieuse lors de la lecture d'un fichier avec des fonctions Java IO

> erreur tout en cherchant à 38128 dans myFile, la longueur du fichier: 85742 java.io.EOFException à java.io.RandomAccessFile.readInt (RandomAccessFile.java:725) à java.io.RandomAccessFile. readLong (RandomAccessFile.java:758) >

Mais si vous voyez que je suis en train de chercher à « 38128 » où, comme la longueur du fichier est « 85742 ». Il a signalé l'exception EOF. Je me demande comment c'est possible? Un autre processus ajoute périodiquement le contenu à ce fichier et ferme le gestionnaire de fichiers. Il ajoute du contenu à l'aide de DataOutputStream. Mon processus essaie de chercher à certains endroits et de le lire. Une chose de plus est que j'ai obtenu cette exception une seule fois. J'ai essayé de le reproduire mais cela ne s'est jamais reproduit. Le fichier est uniquement sur le disque local. Pas de fichier.

Merci D. L. Kumar

+0

Pourriez-vous poster le code qui génère ce message? Est-ce une impression d'exception ou l'imprimez-vous vous-même? – kgiannakakis

+0

J'imprime cette exception lorsque l'appel seek() échoue. –

+0

Mise à jour de la question maintenant. –

Répondre

2

Je serais très prudent lorsque vous essayez de faire un accès aléatoire sur un fichier qui est en cours d'écriture en même temps à partir d'un autre processus. Cela pourrait conduire à toutes sortes de problèmes de synchronisation étranges, comme vous le subissez en ce moment.

déterminez-vous la longueur du fichier du même processus que celui qui fait la recherche()? Est-ce que l'autre traitement de modification a fait un flush()?

+0

Mise à jour de la question à nouveau. Je suis en train de déterminer la longueur du fichier à partir du même processus avec lequel je fais chercher(). Comme je l'ai mis à jour tout à l'heure, d'autres processus ajoutent les choses et le ferment. si proche utilise flush() yesh flush est en train de se produire. –

1

Le processus d'écriture des données peut avoir été dit d'écrire les données, mais les données peuvent être mises en tampon pour écrire. Veillez à appeler flush() sur le flux de sortie avant d'essayer de lire les données.

+0

Mais dans ce cas, pourquoi la longueur du fichier est également erronée. Ofcourse nous pouvons dire quand je suis en train de chercher le fichier() devient écrit et quand j'ai vérifié le fichier de longueur est déversée. Mais chaque fois qu'un autre processus ajoute une très petite quantité de données. Donc, cela pourrait ne pas être arrivé pendant le rinçage. –

+0

Où êtes-vous la vérification de la longueur de la fonction? Vous devriez le faire dans le même fil que seek(). – Pesto

Questions connexes