【发布时间】:2010-11-26 02:24:06
【问题描述】:
例如,假设我想从数组中删除所有长于 3 个字节的 0 连续段
byte a[] = {1,2,3,0,1,2,3,0,0,0,0,4};
byte r[] = magic(a);
System.out.println(r);
结果
{1,2,3,0,1,2,3,4}
我想在 Java 中做一些类似正则表达式的事情,但在字节数组而不是字符串上。
有什么内置的东西可以帮助我(或者有没有好的第三方工具),还是我需要从头开始工作?
字符串是 UTF-16,所以来回转换不是一个好主意吗?至少这是很多浪费的开销……对吧?
【问题讨论】:
-
性能和内存使用对您的用例有多重要?一般来说,RAM 很便宜,而 CPU 速度很快。您是否真的发现了瓶颈,还是担心效率?您可以通过使用 8 位编码将 byte [] 转换为 String 来轻松尝试,进行正则表达式并检查性能。毕竟,我们不必担心 16 位字符的 Java 字符串在 ANSI 环境中的正常使用效率有多低,对吧?
-
这是一个高性能应用程序,我更担心循环而不是内存使用。
-
仍然值得进行基准测试; Hotspot VM 会将热点中的代码转换为机器代码,因为它都适合 32 位机器字,所以它将以与 8 位数据相同的速度处理 16 位数据。即使你发现它太慢了,你也不会花太多时间去发现它。
-
真的,我想我还是要试试,谢谢