java - Java 中用于标识网络消息的连续常量

标签 java networking constants

我这里有一个 Java 问题。我有很多常量,它们是连续的常量整数,当前定义如下:

interface Flags {
  static final short A = 0;
  static final short B = A + 1;
  static final short FIRST_USER_FLAG = B + 1;
}

你们中的许多人现在会推荐我使用 Enum。问题是,我需要不止一个地方有这些标志。所以它会是这样的:

interface CustomFlags {
  static final short USER_A = Flags.FIRST_USER_FLAG + 1;
  static final short USER_B = USER_A + 1;
}

您在此处看到的代码在网络两侧也必须相同,包括服务器代码和客户端代码。它们之间的每条消息都定义了它的标志,通过这个标志,网络创建消息对象,并用这个标志注册。这似乎不是最好的方法,但我想不出更好的方法。问题是,网络代码有自己的标志和消息,它们执行一些基本的身份验证和握手。然后必须有由使用网络的代码定义的消息(及其标志)。

我的问题是,如何使其更具可维护性和可读性?另外,如果有人知道发送和重新创建消息的更好方法(我使用 TCP 和 UDP,具体取决于消息),我将非常感激听到它。

如果有什么我没有解释的地方,请告诉我,我会添加。

PS:抱歉我的英语不好,因为我不是母语人士。

最佳答案

我会保持原样。这是定义协议(protocol)常量的常用技术。如果对等点不是 Java,我可能会进一步“反工程”,直接定义名称及其值,而不用担心算术。您不希望它很容易更改,您实际上希望它不可能更改,这样就不会出现无意的协议(protocol)不兼容性。枚举适用于您对名称和类型安全更感兴趣的情况不太关心实际值、序数等。

关于java - Java 中用于标识网络消息的连续常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13439707/

相关文章:

java - 比较 arraylist 值并更新 MySQL

networking - 如何延长 igraph 网络图中的边 (layout=fruchterman.reingold)?

c++ - `ios_base` 的标志都是静态常量整型变量。为什么可以用 `ios_base::setf()` 改变它们?

constants - 在 eslint 中禁用 Camel 大小写规则的检查

ios - request.cancel() 用于重复使用的单元格 Alamofire swift

c++ - 相同的地址,但不同的内容

java - 如何均匀分布 JavaFX VBox 的元素

java - Scala 作为新的 Java?

java - 在 Wicket 中处理模型对象集合的正确方法是什么?

networking - 在不同的网络上安装Kubernetes + Cilium