快速阅读文件&将其转换为HEX

时间:2015-05-29 15:13:28

标签: java hex bufferedreader

我需要读取ascii中的文件并在应用某些函数之前将其转换为十六进制(搜索特定的字符)

为此,我读取一个文件,将其转换为十六进制并写入一个新文件。然后我打开我的新hex文件并应用我的函数。

我的问题是它花了太多时间来阅读和转换它(对于9Mb文件大约需要8秒)

我的阅读方法是:

public static void convertToHex2(PrintStream out, File file) throws IOException {
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); 
    int value = 0;

    StringBuilder sbHex = new StringBuilder();
    StringBuilder sbResult = new StringBuilder();

    while ((value = bis.read()) != -1) {   
        sbHex.append(String.format("%02X ", value));            
       }
        sbResult.append(sbHex); 
        out.print(sbResult);
        bis.close();
}

你有什么建议让它更快吗?

2 个答案:

答案 0 :(得分:0)

您是否衡量了实际的瓶颈?因为您似乎每次都在循环中读取非常少量的数据并进行处理。您也可以阅读更大的数据块并处理这些数据,例如:使用DataInputStream或其他什么。这样,您可以从对操作系统,文件系统,缓存等的优化读取中获益更多。

此外,你填写sbHex并将其附加到sbResult,以便在某处打印。对我来说看起来像是一个不必要的副本,因为在你的情况下sbResult总是空的,而对于你的PrintStream你已经有了一个StringBuilder的sbHex。

答案 1 :(得分:0)

试试这个:

static String[] xx = new String[256];
static {
    for( int i = 0; i < 256; ++i ){
        xx[i] = String.format("%02X ", i);
    }
}

并使用它:

sbHex.append(xx[value]);

格式化是一项繁重的操作:它不仅仅是转换 - 它还必须查看格式字符串。