java - ERROR从byte []转换为File(十六进制值)

时间:2014-12-04 23:00:54

标签: java file hex bytearray

好的,我有一个带有一些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();
}

} 

1 个答案:

答案 0 :(得分:1)

您正在从二进制文件中读取数据,然后尝试将其写为字符流。此外,你强迫它使用ASCII(一个7位字符集)作为字符编码。

尝试更改要使用的save方法:

     FileOutputStream output = new FileOutputStream("C:\\Users\\Roman\\Desktop\\test2.sav");
     try {
         output.write(bytearray);
     } finally {
         output.close();
     }

这将避免字符(重新)编码问题。