2016-09-07 19 views
0

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

㐀ㄹ㈠㤰㐠㔸㈠㈱㐠㠶㈠㐱㐠㘲㈠㘰㌠㠷ㄠ㔹㌠㌳ㄠ㌹㈠㘹㈠㄰㈠㠷㈠㜳㈠㐶㈠㐷㈠㐶㈠㔷㈠㌶㈠㔵㈠㐵㈠㠰㈠㤴ㄠ㔲㈠㤴㐠‶㐲‹㌱㈠㘴〠㈠㘴〠㈠㘴〠㈠㜴〠㈠㠴〠㈠㠴〠㈠㜴㠠㈠㔴ㄠ‶㐲‵㤱㈠㔴ㄠ‹㐲‵㠱㈠㜴ㄠ‶㐲‹ㄱ㈠〵ㄠ‰㔲‰〱 
+0

Auch wenn es etwa 50% ist, ist es nicht jedes andere Mal – Czarking

+1

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

+0

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

Antwort

1

Die BufferedWriter macht keinen Fehler, und der Code korrekt ist, außer für die Redundanz der Verwendung

this.saveFile.delete(); 
try{this.saveFile.createNewFile();} 
       catch (IOException e){System.out.println("File creation error");} 

und

new FileWriter 

Der Fehler beim Lesen der Daten erfolgt, wenn die Datei geöffnet wird . Abhängig davon, welches Programm die Daten öffnet, werden unterschiedliche Ergebnisse angezeigt, da die Software die Daten liest. Notizblock zeigte Symbole an, da es die Zahlen als ASCII interpretierte. Die Konsole hat nicht versucht, die Daten zu interpretieren und nur angezeigt, was darauf geschrieben wurde. Wenn Sie ein Programm verwenden, das nicht versucht, die Zahlen in der Datei zu interpretieren, können die Daten korrekt angezeigt werden.

0

Da Sie nicht angegeben und Beispiel für welche Daten Sie in den Stream schreiben, sind Sie wahrscheinlich Bly erlebt die Bush versteckte die Fakten Phänomen.

+0

danke, bearbeitet siehe oben, Bd9 – Czarking

Verwandte Themen