So habe ich ein Programm, das eine Reihe von Daten sammelt und kontinuierlich die Daten in einer Zeichenfolge mit einem einzelnen Leerzeichen zwischen jedem Eintrag verkettet. Während meiner nahen Routine drucke ich die Zeichenkette in eine TXT-Datei mit gepuffertem Schreiber. Ungefähr 50% der Zeit erscheinen die Daten als (meistens) chinesische Symbole. Verrichtet die VM seltsames Unicode-Zeug? Warum passiert das nur manchmal?Buffered Writer erstellt gelegentlich Symbole anstelle von Zahlen
Ich habe mich in anderen Foren umgesehen und andere Instanzen dieses Problems nicht gesehen. Keiner der anderen CS Majors, die ich kenne, verstehen, was passiert.
EDIT: die Daten sind alle Ganzzahlen im Bereich 0-1365;
UPDATE: Nach weiteren Recherchen fand ich this, die mich denken lassen, dass ein PrintStream eher als ein BufferedWriter kann jemand damit sprechen kann? Ich habe den PrintStream getestet und kann ihn nicht wie einen BufferedWriter mit einem FileWriter konstruieren, was bedeutet, dass ich mehr Forschung brauche, um in meinen txt zu schreiben.
UPDATE: Drucken auf der Konsole macht diesen Fehler nicht auftreten. Ich werde eine Antwort akzeptieren, die erklärt, wie Notepad (das Programm, mit dem ich den txt öffne) manchmal Zahlen anzeigt und manchmal Symbole anzeigt.
Hier ist der relevante Code:
//fields
private static BufferedWriter out;
private File saveFile;
String data;
//inside constructor
this.saveFile = new File("C:\\Users\\HPlaptop\\Desktop\\MouseData.txt");
this.saveFile.delete();
try{this.saveFile.createNewFile();}
catch (IOException e){System.out.println("File creation error");}
try {out = new BufferedWriter(new FileWriter("C:\\Users\\HPlaptop\\Desktop\\MouseData.txt"));}
catch (IOException e) {System.out.println("IO Error");}
this.control.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{ //there is a method call here but the basics are below
out.write(data);
out.close();
System.exit(0);
}
});
Hier ist ein Setbeispiel Daten korrekt gedruckt:
1365 767 1365 767 1365 767 1364 767 1353 756 1268 692 1114 604 980 488 812 334 744 283 694 244 593 150 473 81 328 13 207 0 124 0 115 0 102 0 99 6 107 13 132 20 173 32 187 31 190 25 194 20 201 17 215 14 221 10 224 7 224 7 224 7 226 6 226 6 226 6 226 6 226 6 226 6 226 6
Diesen Datensatz Sekunden genommen später und ist nicht, was ich will
㐀ㄹ㈠㤰㐠㔸㈠㈱㐠㠶㈠㐱㐠㘲㈠㘰㌠㠷ㄠ㔹㌠㌳ㄠ㌹㈠㘹㈠㈠㠷㈠㜳㈠㐶㈠㐷㈠㐶㈠㔷㈠㌶㈠㔵㈠㐵㈠㠰㈠㤴ㄠ㔲㈠㤴㐠‶㐲‹㌱㈠㘴〠㈠㘴〠㈠㘴〠㈠㜴〠㈠㠴〠㈠㠴〠㈠㜴㠠㈠㔴ㄠ‶㐲‵㤱㈠㔴ㄠ‹㐲‵㠱㈠㜴ㄠ‶㐲‹ㄱ㈠〵ㄠ‰㔲‰〱
Auch wenn es etwa 50% ist, ist es nicht jedes andere Mal – Czarking
Was lässt Sie glauben, dass die Daten selbst keine seltsamen chinesischen Symbole sind? Ich würde weniger geneigt sein, es dem BufferedWriter als die Daten zu tadeln – Stoud
guten Punkt, den ich meine Frage redigierte; die Daten sind alle Ganzzahlen von 0-1356; Ich habe den ganzen Code nicht eingeschlossen, weil es zu lang sein würde – Czarking