L'écriture d'un long (de type primitif) à un fichier en Java
Salut à tous,
J'ai un tableau de long que je voudrais écrire dans un .fichier txt que je peux ensuite ouvrir dans gedit (un numéro par ligne). Puis-je obtenir ces valeurs à l'aide d'une soustraction de deux instances de Système.currentTimeMillis().
J'utilise le code suivant:
BufferedWriter out = new BufferedWriter(new FileWriter("latency.txt"));
for (int i = 0; i < USER_LIMIT; ++i) {
out.write(latency[i] + "\n");
}
out.close();
Lorsque l'on regarde le fichier, je vois:
0
1
1
0
Je crois que la concaténation de chaîne convertie en long en un entier. Si j'utilise le DataOutputStream, alors je ne peux pas le lire avec gedit ou de tout bloc-notes/éditeur de texte, il semble juste comme des ordures (je crois que c'est l'écriture d'octets).
Quelqu'un s'il vous plaît laissez-moi savoir comment je peux résoudre mon problème s'il vous plaît?
Merci beaucoup!
- Quelles sont les valeurs de
latency[i]
? - Pouvez-vous nous dire ce que les quelques premiers chiffres du tableau sont censés être?
- La concaténation de chaîne n'a pas converti les
long
dans unint
. - J'ai effectivement ne pas vérifier la valeur de la latence[i], et je devrais avoir (my bad). Je vais regarder dès maintenant. Je suppose parce que le système retourne millisecondes que le 1 était un moyen pour les petits. Permettez-moi de double vérifier les valeurs.
- Vraiment, qui aurait été la première chose à vérifier!
- Mon mauvais, les valeurs SONT en réalité que les petits. Je suppose que ma question était tout simplement stupide. Je m'excuse d'avoir fait les gars, vous perdez votre temps!
- Oli Charlesworth: Vous avez raison et je m'excuse vraiment. J'ai été vraiment convaincu pour quelque raison que quelque chose n'allait pas.
Vous devez vous connecter pour publier un commentaire.
Il n'y a rien de mal avec votre code. Que pensez-vous est dans
latency
... n'est-ce pas.produit:
Lorsque vous rencontrez un problème avec ce code, il est souvent utile d'écrire un petit test pour cerner le problème.
En fonte pour une Longue et utiliser toString:
Ou simplement utiliser la statique toString:
latency[i]
est déjà unlong
, cela devrait faire de différence nulle.Lorsque vous utilisez DataOutputStream écrire un long c'est à l'aide d'un codage différent de vos données que gedit comprend.
L'un des plus commune des codages utilisés pour les fichiers texte ASCII. Avec cette chaque octet représente un personnage dans un tableau. Cette table dispose de 128 caractères. Lorsque vous écrire une chaîne dans un fichier à l'aide de Java la façon dont vous le faites c'est ce qui se passe et gedit comprend que l'encodage. Si vous convertissez une longue chaîne à la taille maximale d'un temps peut-être pourrait ressembler à: 9223372036854775807. Qui prendrait 19 octets.
Une longue en Java 64 bits ou 8 octets. Lorsque vous utilisez DataOutputStream une longue qui est écrit dans le fichier de 8 octets. Un éditeur de texte comme gedit ne comprends pas ce codage.
Ce qui complique encore plus les choses, c'est les codages UTF-8.
Vous n'avez pas besoin d'ajouter la nouvelle ligne à le nombre, de sorte que vous pouvez les casser en dehors et à éviter ce problème. Essayez ceci:
int
ou utiliser une autre méthode d'impression. Mon point est que vous n'avez pas besoin d'ajouter la nouvelle ligne pour le numéro avant de l'imprimer.write(String)
méthode - j'ai mis à jour ma réponse à montrer comment.