我有个问题。我必须处理IP地址和端口号。每个数据包都包含源IP和目的IP、源端口和目的端口。假设一个包是(1.2.3.4,5.6.7.8,22,8080),这样我就可以用两种不同的数据类型来存储它们。
String packet ="1.2.3.4, 5.6.7.8,22, 8080";
short[] packet={1,2,3,4,5,6,7,8,22, 8080}
哪一个会占用更多内存,哪一个处理起来效率更高
发布于 2014-10-15 13:18:24
short[]
为10*2字节,外加对象开销。
String
需要一个分隔符,所以它至少是9*2 +1个字符(如果每个数字都是一个数字)加上对象开销,在实际情况下总是更长。
因此,short[]
不仅内存更少,而且(我强烈怀疑)更容易处理。
发布于 2014-10-15 13:22:02
实际上,每个IP传输32位数据(4个8位值),每个端口传输16位数据。因此,您的总记录可以压缩为总共32+32+16+16 = 96位,或3个32位int
原语。
您可以使用以下问题的答案:Going from 127.0.0.1 to 2130706433, and back again将每个IP地址打包到单个int
值中。一种类似的技术也可以将两个端口号打包到单个int
中(因为端口号实际上是高达16位的值)。
通过这种“优化”,您可以将一条记录存储到3个int值中(您可以将这些值包装到一个类中,并提供实用方法来获取每段数据)。
https://stackoverflow.com/questions/26374322
复制相似问题