我有一个问题。我必须处理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}
哪一个会占用更多内存,哪一个更有效处理
答案 0 :(得分:0)
short[]
是10 * 2字节,加上对象开销。
String
需要一个分隔符,因此至少有9 * 2 + 1个字符(如果每个数字都是一个数字)加上对象开销,在实际情况下总是会更长。
因此short[]
内存较少,而且(我强烈怀疑)更容易处理。
答案 1 :(得分:0)
实际上,每个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值中(您可以将其包装到类中并提供实用程序方法来获取每个数据)。