そのため、一連のデータを収集し、各エントリ間に単一の空白を含む文字列にデータを連続的に連結するプログラムがあります。クローズ ルーチン中に、バッファ ライターを使用して文字列を txt ファイルに出力します。約 50% の確率で、データは (ほとんどが) 中国語の記号として表示されます。VM は奇妙な Unicode 処理を行っていますか? これはなぜ時々しか発生しないのですか?
私は他のフォーラムを見回しましたが、この問題の他の例は見たことがありません。私が知っている他の CS 専門家は、何が起こっているのかを理解していません。
EDIT : データはすべて 0 ~ 1365 の範囲の整数です。
更新:さらに調査したところ、BufferedWriterではなくPrintStreamが必要になる可能性があると思われることがわかりました。PrintStream をテストしましたが、BufferedWriter のように FileWriter で構築することはできません。つまり、txt に書き込むにはさらに調査が必要です。
更新: コンソールに出力しても、このエラーは発生しません。メモ帳(txtを開くために使用しているプログラム)が数字を表示したり、記号を表示したりする方法を説明する回答を受け入れます。
関連するコードは次のとおりです。
//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);
}
});
以下は、正しく印刷されたデータ セットの例です。
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
このデータセットは数秒後に取得されたものであり、私が望むものではありません
㐀ㄹ㈠㤰㐠㔸㈠㈱㐠㠶㈠㐱㐠㘲㈠㘰㌠㠷ㄠ㔹㌠㌳ㄠ㌹㈠㘹㈠㈠㠷㈠㜳㈠㐶㈠㐷㈠㐶㈠㔷㈠㌶㈠㔵㈠㐵㈠㠰㈠㤴ㄠ㔲㈠㤴㐠‶㐲‹㌱㈠㘴〠㈠㘴〠㈠㘴〠㈠㜴〠㈠㠴〠㈠㠴〠㈠㜴㠠㈠㔴ㄠ‶㐲‵㤱㈠㔴ㄠ‹㐲‵㠱㈠㜴ㄠ‶㐲‹ㄱ㈠〵ㄠ‰㔲‰〱