首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >哪种表示法需要更多内存,哪种表示法更有效

哪种表示法需要更多内存,哪种表示法更有效
EN

Stack Overflow用户
提问于 2014-10-15 12:06:19
回答 2查看 41关注 0票数 0

我有个问题。我必须处理IP地址和端口号。每个数据包都包含源IP和目的IP、源端口和目的端口。假设一个包是(1.2.3.4,5.6.7.8,22,8080),这样我就可以用两种不同的数据类型来存储它们。

代码语言:javascript
运行
复制
 String packet ="1.2.3.4, 5.6.7.8,22, 8080";
 short[] packet={1,2,3,4,5,6,7,8,22, 8080}

哪一个会占用更多内存,哪一个处理起来效率更高

EN

回答 2

Stack Overflow用户

发布于 2014-10-15 13:18:24

short[]为10*2字节,外加对象开销。

String需要一个分隔符,所以它至少是9*2 +1个字符(如果每个数字都是一个数字)加上对象开销,在实际情况下总是更长。

因此,short[]不仅内存更少,而且(我强烈怀疑)更容易处理。

票数 0
EN

Stack Overflow用户

发布于 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值中(您可以将这些值包装到一个类中,并提供实用方法来获取每段数据)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26374322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档