2010-08-02 9 views
3

Comme d'autres messages ici à stackoverflow l'ont déjà expliqué, l'exception EOFException se produit lorsque la fin du flux est atteinte de manière inattendue. J'ai une méthode, qui convertit un tableau d'octets en un nombre long. Ce tableau d'octets est un nombre uint64_t que j'ai récupéré sur ma liaison java à partir d'une base de données en C. Je connais les problèmes avec uint64_t et la conversion en longs nombres (le bit signé).EOFException dans mon code Java

Voici ma méthode: (!)

public long castByteArrayToLong(byte[] bb){ 
    ByteArrayInputStream stream = new ByteArrayInputStream(bb); 
    DataInputStream di = new DataInputStream(stream); 
    long number=-2; 
    try { 
     number = di.readLong(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return number; 
} 

Cette méthode parfois génère cette exception:

java.io.EOFException 
at java.io.DataInputStream.readFully(DataInputStream.java:180) 
at java.io.DataInputStream.readLong(DataInputStream.java:399) 
at TreeManager.castByteArrayToLong(TreeManager.java:191) 
at TreeManager.test2(TreeManager.java:442) 
at TreeManager.main(TreeManager.java:72) 

Ce que je ne comprends pas pourquoi puis-je obtenir cette exception? Je ne me suis pas spécifié la longueur du tableau d'octets, mais je passe juste le tableau d'octets à ByteArrayInputStream, donc théoriquement je ne devrais pas obtenir une telle exception, je pense.

(S'il vous plaît pardonnez-moi, si la solution est évidemment)

Répondre

2

vérifier l'bytearray si elle a vraiment 8 octets et non nul

+0

merci, ce fut bien le problème – mkn

2

Un tableau vide, tableau null ou tableau avec moins de 8 causes octets l'éxéption. Essayez le code suivant

ByteArrayInputStream stream = new ByteArrayInputStream(new byte[]{}); 
DataInputStream di = new DataInputStream(stream); 
long number=-2; 
try { 
    number = di.readLong(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+1

le problème était que le tableau d'octets que j'ai reçu de la base de données est parfois pas 8 octets, même si elle devrait ... – mkn