好的,我有一个带有一些HEX值的文件以及一个带有byte []的值的程序,以便转换一些十六进制值,然后将其重新转换为一个文件。 问题是,当我将de byte数组重新转换为文件时,会修改一些十六进制值,而我找不到问题。 如果你发现任何可能的错误,请不要犹豫。
正如您所看到的,我有一个test.sav文件,这里是:
这是该程序的产品,这两个文件是不同的,它们应该是相同的,因为已经进行了任何更改:
以下是代码:
public class Test {
public static File file;
public static String hex;
public static byte[] mext;
public static byte[] bytearray;
public static void main(String[] args) throws IOException {
file = new File("C:\\Users\\Roman\\Desktop\\test.sav");
StringBuilder sb = new StringBuilder();
FileInputStream fin = null;
try {
fin = new FileInputStream(file);
bytearray = new byte[(int)file.length()];
fin.read(bytearray);
for(byte bytev : bytearray){
sb.append(String.format("%02X", bytev));
}
System.out.println(sb);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {}
//replaceMax(); <-- I deduced that conversion is not the problem
save(); // THIS IS THE IMPORTANT PART
}
public static void save() throws IOException{
PrintWriter pw = new PrintWriter("C:\\Users\\Roman\\Desktop\\test2.sav");
pw.write("");
pw.close();
FileWriter fw = new FileWriter(new File("C:\\Users\\Roman\\Desktop\\test2.sav"));
BufferedWriter out = new BufferedWriter(fw);
out.write(new String(bytearray, "ASCII"));
out.close();
}
}
答案 0 :(得分:1)
您正在从二进制文件中读取数据,然后尝试将其写为字符流。此外,你强迫它使用ASCII
(一个7位字符集)作为字符编码。
尝试更改要使用的save
方法:
FileOutputStream output = new FileOutputStream("C:\\Users\\Roman\\Desktop\\test2.sav");
try {
output.write(bytearray);
} finally {
output.close();
}
这将避免字符(重新)编码问题。