【发布时间】:2011-08-03 19:53:11
【问题描述】:
我们知道字节序与计算机存储数据的方式有关。大端计算机体系结构包括 IBM 370、摩托罗拉 68000 和 Sun Sparc。小端计算机包括英特尔系列(80486、奔腾等)和 VAX。
由于 JVM,Java 始终是 Big-Endian。 由于协议,网络应始终为 Big-Endian。
- C、C++ 和 C# 依赖于它们正在运行的计算机吗?
- 由于协议,网络应始终为 Big-Endian。如果我们在发送之前不调用 htons 和 htonl 怎么样?如果发送者是英特尔机器上的 C++,则发送的数据将是 Little-endian。对吗?
- 所以我们不需要关心字节序(调用 ntohl 和 htonl),如果我们知道所有客户端和服务器将使用具有相同架构的计算机并使用相同的程序语言。对吗?
【问题讨论】:
-
您是否试图为编写不可移植代码提出论据,因为目前您拥有一组统一的机器。历史已经(很多次)表明,短视的优化尝试永远不会得到回报,因为预测未来是不可能的。您基本上是在尝试将工作推给代码维护者,当未来将他踢到牙齿时,他将不得不修复您损坏的不可移植代码。所以编码就好像他(维护者)知道你住在哪里并且拥有一把斧头。
-
还有谁说网络层没有某种形式的内部压缩来很好地处理“网络字节顺序”中的数字。你过早的优化会搞砸的。
标签: c# java c++ networking programming-languages