La lecture des valeurs entières de fichier binaire à l'aide de Java
Je suis en train d'écrire des valeurs de plus de 256 à l'aide de DataOupPutStream.write()
méthode. Lorsque j'essaie de lire la même valeur à l'aide de DataInputStream.read()
il sera de retour 0. Donc, j'ai utilisé DataOutputStream.writeInt()
et DataInputStream.readInt()
méthodes d'écrire et de récupérer les valeurs supérieures à 256 et il fonctionne très bien.
Consulter ci-dessous l'extrait de code, je voudrais savoir le comportement du compilateur que ce qu'il fait dans la in.readInt()
à l'intérieur de la while
déclaration.
FileOutputStream fout = new FileOutputStream("T.txt");
BufferedOutputStream buffOut = new BufferedOutputStream(fout);
DataOutputStream out = new DataOutputStream(fout);
Integer output = 0;
out.writeInt(257);
out.writeInt(2);
out.writeInt(2123);
out.writeInt(223);
out.writeInt(2132);
out.close();
FileInputStream fin = new FileInputStream("T.txt");
DataInputStream in = new DataInputStream(fin);
while ((output = in.readInt()) > 0) {
System.out.println(output);
}
La Sortie quand j'ai couru ce morceau de code est :
Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readInt(Unknown Source)
at compress.DataIOStream.main(DataIOStream.java:34)
257
2
2123
223
2132
Mais quand j'ai couru en mode debug, j'obtiens le résultat suivant :
2123
223
2132
Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readInt(Unknown Source)
at compress.DataIOStream.main(DataIOStream.java:34)
OriginalL'auteur rozar | 2011-05-26
Vous devez vous connecter pour publier un commentaire.
La readInt() est une méthode comme une autre. Vous obtenez un EOFException parce que c'est ce que la Javadoc de readInt() dit qui va se produire lorsque vous avez atteint la fin du fichier.
Quand je lance
- Je obtenir ce normal et le mode de débogage.
Lorsque vous écrivez du Système.et du Système.err (lorsque exception sont écrites) de l'ordre de la sortie n'est pas conforme/toujours le même. L'utilisation de débogage est suffisant pour changer l'ordre de la sortie.
ouais.. Mais dans le mode de Débogage, les valeurs lues sont également différents. Supposons que, si je retire le tout de la clause dans mon extrait de code et de le remplacer avec 5 Système..println(en.readInt());
L'tandis que la clause ne fait pas de différence. Il est plus probable que le débogage est correcte et que vous faites quelque chose de mal.
Merci Pierre.... Je l'apprécie...
OriginalL'auteur Peter Lawrey