2012-02-28 156 views
5

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

Enum values { 
    value1, 
    value2 
} 

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

将通过互联网发送这非常好! 谢谢大家!

巴斯

+0

重复的http://stackoverflow.com/questions/1681976/enum-with-int-value-in-java – 2012-02-28 13:05:50

+0

不,我不想要为属性添加值,我只是想通过套接字发送一个在服务器和客户端上的微弱的枚举值。感谢您的评论;) – Basaa 2012-02-28 13:07:39

+0

尝试[this](http://mindprod.com/jgloss/enum.html#ORDINAL)。 – 2012-02-28 13:08:44

回答

6

要么马歇尔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值...

+0

那(和Banthars andswer)运行良好。现在还有一个问题:什么是Java函数获得与C#相同的结果:this.cmd =(Command)BitConverter.ToInt32(data,0); – Basaa 2012-02-28 13:21:16

+0

@Basaa:从技术上讲,这应该是第二个问题(它更可能会收到答案),但看看这个:stackoverflow.com/questions/1026761 – 2012-02-28 13:25:16

+0

如果可以的话,我会使用该名称。例如'dataOutput.writeUTF(value.name())'和'Enum e = Values.forName(dataInput.readUTF())',因为它更具可读性。 – 2012-02-28 13:43:19