gpt4 book ai didi

java - 如何更快地将长数组保存为反十六进制数?

转载 作者:太空宇宙 更新时间:2023-11-03 10:20:21 25 4
gpt4 key购买 nike

我最近开始在android平台上开发。我正在开发一个应用程序,为了寻找一些线索,我正在查看他们提供的 android 示例音乐应用程序。
在应用程序中,在他们保存正在播放列表的地方,他们给出了一个我无法理解的参数。参数及代码如下:

if (full) {
StringBuilder q = new StringBuilder();

// The current playlist is saved as a list of "reverse hexadecimal"
// numbers, which we can generate faster than normal decimal or
// hexadecimal numbers, which in turn allows us to save the playlist
// more often without worrying too much about performance.
// (saving the full state takes about 40 ms under no-load conditions
// on the phone)
int len = mPlayListLen;
for (int i = 0; i < len; i++) {
long n = mPlayList[i];
if (n < 0) {
continue;
} else if (n == 0) {
q.append("0;");
} else {
while (n != 0) {
int digit = (int)(n & 0xf);
n >>>= 4;
q.append(hexdigits[digit]);
}
q.append(";");
}
}

在哪里

mPlayList is an array of long numbers

而 hexdigits 是:

private final char hexdigits [] = new char [] {
'0', '1', '2', '3',
'4', '5', '6', '7',
'8', '9', 'a', 'b',
'c', 'd', 'e', 'f'
};

然后 "q" 被保存在 sharedpreferences 中。他们以类似的方式稍后使用这些十六进制数字检索列表。如果有人能解释这段代码的重要性,我将不胜感激。我的意思是这与直接使用长值创建字符串有何不同。

最佳答案

他们在这里做的是一个非常简单的算法,可以尽可能快地拼出数字。对于他们需要做的每个数字:

>>
&
append character looked up from array

然后他们在每个数字的末尾附加一次 ;

这些操作中的每一个都非常快,因此最终结果是从内存中取出 long 并将其以尽可能快的速度以尽可能最佳的方式以紧凑的形式放入字符串中。

它是反十六进制,因为最小的数字首先显示。

这将比内置于 Java 中的通用算法更快,尽管如果节省的数量很大我会感到惊讶,除非他们节省了很多这些数字。

关于java - 如何更快地将长数组保存为反十六进制数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24243969/

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