Buffered Writer 偶尔会创建符号而不是数字
Buffered Writer occasionally creates symbols rather than numbers
所以我有一个程序可以收集一堆数据并连续将数据连接成一个字符串,每个条目之间有一个白色 space。在我的关闭例程中,我使用缓冲写入器将字符串打印到 txt 文件中。大约 50% 的时间数据显示为(大部分)中文符号。虚拟机是否在做一些奇怪的 Unicode 事情?为什么这只是偶尔发生?
我在其他论坛上四处张望,没有看到此问题的其他实例。我认识的其他 CS 专业的 None 了解正在发生的事情。
编辑:数据是0-1365范围内的所有整数;
更新:经过进一步的研究,我发现 this 这让我觉得可能需要一个 PrintStream 而不是 BufferedWriter 任何人都可以谈谈吗?我测试了 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
这个数据集是几秒钟后拍的,不是我想要的
㐀ㄹ㈠㤰㐠㔸㈠㈱㐠㠶㈠㐱㐠㘲㈠㘰㌠㠷ㄠ㔹㌠㌳ㄠ㌹㈠㘹㈠㈠㠷㈠㜳㈠㐶㈠㐷㈠㐶㈠㔷㈠㌶㈠㔵㈠㐵㈠㠰㈠㤴ㄠ㔲㈠㤴㐠‶㐲‹㌱㈠㘴〠㈠㘴〠㈠㘴〠㈠㜴〠㈠㠴〠㈠㠴〠㈠㜴㠠㈠㔴ㄠ‶㐲‵㤱㈠㔴ㄠ‹㐲‵㠱㈠㜴ㄠ‶㐲‹ㄱ㈠〵ㄠ‰㔲‰〱
由于您没有提供写入流的数据示例,您可能遇到了布什隐藏事实现象。
BufferedWriter 没有出错,代码是正确的,除了
使用
的冗余
this.saveFile.delete();
try{this.saveFile.createNewFile();}
catch (IOException e ){System.out.println("File creation error");}
和
new FileWriter
打开文件时出现读取数据错误。由于软件读取数据的方式不同,打开数据的程序也会显示不同的结果。记事本显示符号是因为它将数字解释为 ASCII。控制台没有尝试解释数据,只是显示写入的内容。使用不尝试解释文件中数字的程序将允许正确查看数据。
所以我有一个程序可以收集一堆数据并连续将数据连接成一个字符串,每个条目之间有一个白色 space。在我的关闭例程中,我使用缓冲写入器将字符串打印到 txt 文件中。大约 50% 的时间数据显示为(大部分)中文符号。虚拟机是否在做一些奇怪的 Unicode 事情?为什么这只是偶尔发生?
我在其他论坛上四处张望,没有看到此问题的其他实例。我认识的其他 CS 专业的 None 了解正在发生的事情。
编辑:数据是0-1365范围内的所有整数;
更新:经过进一步的研究,我发现 this 这让我觉得可能需要一个 PrintStream 而不是 BufferedWriter 任何人都可以谈谈吗?我测试了 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
这个数据集是几秒钟后拍的,不是我想要的
㐀ㄹ㈠㤰㐠㔸㈠㈱㐠㠶㈠㐱㐠㘲㈠㘰㌠㠷ㄠ㔹㌠㌳ㄠ㌹㈠㘹㈠㈠㠷㈠㜳㈠㐶㈠㐷㈠㐶㈠㔷㈠㌶㈠㔵㈠㐵㈠㠰㈠㤴ㄠ㔲㈠㤴㐠‶㐲‹㌱㈠㘴〠㈠㘴〠㈠㘴〠㈠㜴〠㈠㠴〠㈠㠴〠㈠㜴㠠㈠㔴ㄠ‶㐲‵㤱㈠㔴ㄠ‹㐲‵㠱㈠㜴ㄠ‶㐲‹ㄱ㈠〵ㄠ‰㔲‰〱
由于您没有提供写入流的数据示例,您可能遇到了布什隐藏事实现象。
BufferedWriter 没有出错,代码是正确的,除了 使用
的冗余this.saveFile.delete();
try{this.saveFile.createNewFile();}
catch (IOException e ){System.out.println("File creation error");}
和
new FileWriter
打开文件时出现读取数据错误。由于软件读取数据的方式不同,打开数据的程序也会显示不同的结果。记事本显示符号是因为它将数字解释为 ASCII。控制台没有尝试解释数据,只是显示写入的内容。使用不尝试解释文件中数字的程序将允许正确查看数据。