【问题标题】:Java ~ Send an enum over a socket connectionJava ~ 通过套接字连接发送一个枚举
【发布时间】:2012-02-28 13:04:24
【问题描述】:

通过套接字发送枚举值的最佳方式是什么?有没有办法将枚举值转换为 int,反之亦然? 喜欢:

Enum values {
    value1,
    value2
}

int value = (int)value1;
And...
values value2 = (value) value;

如果能通过互联网发送这个就太好了! 谢谢大家!

基础

【问题讨论】:

标签: java sockets asynchronous tcp enums


【解决方案1】:

要么编组到int

int ordinal = values.value1.ordinal()

//unmarshalling
values.values[ordinal];

String:

String name = values.value1.name();

//unmarshalling
values.valueOf(name);

前者节省了一些空间(32 位,而不是可变长度的字符串),但更难维护,例如重新排列 enum 值将破坏 ordinal() 向后兼容性。另一方面,ordinal() 允许您重命名 enum 值...

【讨论】:

  • 那(和 Banthars andswer)工作得很好。现在另一个问题:获得与 C# 相同结果的 Java 函数是什么:this.cmd = (Command)BitConverter.ToInt32(data, 0);
  • @Basaa:从技术上讲,这应该是第二个问题(您更有可能会收到答案),但看看这个:stackoverflow.com/questions/1026761
  • 如果可以的话,我会使用这个名字。例如使用dataOutput.writeUTF(value.name())Enum e = Values.forName(dataInput.readUTF()),因为这也更具可读性。
  • 这是推荐/合理的方法,还是使用ObjectOutputStream 和相应的ObjectInputStream 分别发送和接收enum 是更好的做法?
猜你喜欢
  • 2010-12-10
  • 2019-06-12
  • 1970-01-01
  • 2012-10-05
  • 1970-01-01
  • 2014-01-11
  • 2021-01-11
  • 1970-01-01
  • 2020-03-07
相关资源
最近更新 更多