我正在开发一个应该读取和处理平面文件的应用程序。这些文件并不总是对记录中的每个字段使用一致的编码,因此我们决定应该读取/写入字节并避免将它们转换为字符串所需的解码/编码。
但是,这些字段中有很多都是简单的整数,我需要验证它们(测试它们是否真的是整数并且在一定范围内)。我需要一个接收 byte[] 并将其转换为 int 的函数。我假设所有数字都是纯 ASCII 码。
我知道我可以通过首先将 byte[] 转换为 CharBuffer,解码为 ISO-8859-1 或 UTF-8,然后调用 Integer.parseInt() 来做到这一点,但这似乎会带来很大的开销和性能很重要。
所以,基本上我需要的是 Java 中 atoi() 的等价物。我更喜欢 API 函数(包括第 3 方 API)。此外,该函数应该以某种方式报告错误。
顺便说一句,我在表示日期/时间的字段上遇到了同样的问题(不过这种情况比较罕见)。如果有人能提到一些用于 Java 的快速类 C 库,那就太好了。
最佳答案
虽然我无法为您提供现成的 Java 解决方案,但我想向您指出有趣的 (c) 代码供您阅读:author的qmail有一个小函数可以从字节数组 scan_ulong
中快速解析无符号长整型,您可以在网络上找到该函数的许多版本:
unsigned int scan_ulong(register const char *s,register unsigned long *u)
{
register unsigned int pos = 0;
register unsigned long result = 0;
register unsigned long c;
while ((c = (unsigned long) (unsigned char) (s[pos] - '0')) < 10) {
result = result * 10 + c;
++pos;
}
*u = result;
return pos;
}
(取自此处:https://github.com/jordansissel/djbdnsplus/blob/master/scan_ulong.c)
该代码应该非常顺利地转换为 java。
关于使用 byte[] 的 Java 快速 atoi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9092842/