gpt4 book ai didi

java - Java 中的 Hex To String 性能太慢

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:00:10 25 4
gpt4 key购买 nike

我的 android 程序有以下方法,用 Java 编写。

该方法接受一个十六进制字符串并返回一个用 ascii 编写的相同文本的字符串。

public static String hexToString(String hex)
{
StringBuilder sb = new StringBuilder();

for (int count = 0; count < hex.length() - 1; count += 2)
{
String output = hex.substring(count, (count + 2)); //grab the hex in pairs

int decimal = Integer.parseInt(output, 16); //convert hex to decimal

sb.append((char)decimal); //convert the decimal to character
}

return sb.toString();
}

该方法运行良好,但我的程序对时间要求很高,而且该方法可能被调用了数万次。在分析我的程序的慢位时,这种方法占用了太多时间,因为:

Integer.parseInt(output, 16);

hex.substring(count, (count + 2));

以最慢的顺序排列。

有谁知道实现相同目标的更快方法?

最佳答案

不要在每次迭代时都创建一个新的字符串。提高性能的一种方法是使用 char 数组并对每个字符应用数学运算。

public static String hexToString(String hex) {
StringBuilder sb = new StringBuilder();
char[] hexData = hex.toCharArray();
for (int count = 0; count < hexData.length - 1; count += 2) {
int firstDigit = Character.digit(hexData[count], 16);
int lastDigit = Character.digit(hexData[count + 1], 16);
int decimal = firstDigit * 16 + lastDigit;
sb.append((char)decimal);
}
return sb.toString();
}

有关此方法的更多信息:

此外,如果您成对解析十六进制字符串,您可以按照@L7ColWinters 的建议使用查找表:

private static final Map<String, Character> lookupHex = new HashMap<String, Character>();

static {
for(int i = 0; i < 256; i++) {
String key = Integer.toHexString(i);
Character value = (char)(Integer.parseInt(key, 16));
lookupHex.put(key, value);
}
}

public static String hexToString(String hex) {
StringBuilder sb = new StringBuilder();
for (int count = 0; count < hex.length() - 1; count += 2) {
String output = hex.substring(count, (count + 2));
sb.append((char)lookupHex.get(output));
}
return sb.toString();
}

关于java - Java 中的 Hex To String 性能太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12039341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com