gpt4 book ai didi

java - 将包含ascii字符串的byte[]快速转换为int/double/date等,无需new String

转载 作者:行者123 更新时间:2023-11-29 06:43:03 25 4
gpt4 key购买 nike

我将 FIX 消息字符串 (ASCII) 作为 ByteBuffer。我解析标签值对并将值作为原始对象存储在 TreeMap 中,标签作为键。所以我需要根据其类型将 byte[] 值转换为 int/double/date 等。

最简单的方法是创建新的字符串并将其传递给标准转换器函数。例如

int convertToInt(byte[] buffer, int offset, int length)
{
String valueStr = new String(buffer, offset, length);
return Integer.parseInt(valueStr);
}

据我所知,在 Java 中,创建新对象的成本非常低,仍然有任何方法可以将此 ascii byte[] 直接转换为原始类型。我尝试了手写函数来这样做,但发现它很耗时并且没有带来更好的性能。

是否有任何第三方库可以这样做,最重要的是值得这样做吗?

最佳答案

most of all is it worth doing?

几乎可以肯定不是 - 您应该采取措施来检查这性能瓶颈,然后再做出重大努力来缓解它。

你现在的表现如何?它需要是什么? (“尽可能快”不是一个好的目标,否则您将永远不会停下来 - 找出您可以说“完成”的时间。)

剖析代码 - 真的是字符串创建的问题吗?检查您进行垃圾收集等的频率(再次使用分析器)。

每种解析类型可能具有不同的特征。例如,对于解析整数,如果您发现在很长一段时间内您只有一个数字,您可能想要特殊情况:

if (length == 1)
{
char c = buffer[index];
if (c >= '0' && c <= '9')
{
return c - '0';
}
// Invalid - throw an exception or whatever
}

...但是在您沿着那条路走之前,检查一下这种情况发生的频率。对从未真正出现的特定优化应用大量检查会适得其反。

关于java - 将包含ascii字符串的byte[]快速转换为int/double/date等,无需new String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9172402/

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