我从事涉及客户 - 服务器通信的项目,并使用消息进行通信。但由于存在不同类型的消息,我决定创建一个名为Message的类。
public class Message {
private String m_MessageType;
private Object[] m_Arguments;
public Message() {
}
// Have this constructor to quick add arguments to message
// instead calling Add method for every single argument
public Message( String aMessageType, Object... aArguments ) {
// do something
}
// These methods allow to add data to message at the and of array/list
public void Add(int i) {}
public void Add(float f) {}
public void Add(String s) {}
// ... and so on for all datatypes in Java
// Get methods allow to retrieve data at the specific index of array/list
public int GetInteger(int index) {
return (int) m_Arguments[index];
}
public String GetString(int index) {
return (String) m_Arguments[index];
}
// ... and so on for all datatypes in Java
@Override
public String toString() {
// return String representation of message
}
}
在客户端和服务器端,我有MessageHandlers,它们按消息类型注册,并在收到的消息上执行。 在这个方法中我遇到了问题,因为Java中的原始dataypes不是对象,因为我不能将它们转换为对象或从对象转换为原始数据类型。有没有什么方法可以实现这个,并且它有一些名称或类似设计模式......
我可以使用Integer,Double,...类,但这需要通过网络发送更多字节,因为Integer类比原始数据类型花费更多的字节,我有点不想发送那么多字节。我想保持邮件大小尽可能低......
编辑:我忘了提及,有多个客户端和一台服务器......答案 0 :(得分:0)
U可以直接将数据存储为byte [],这样就可以在java中将所有原始数据类型转换为Byte,轻松查看ByteBuffer。
而不是
private Object [] m_Arguments;
可以使用
private byte [] [] m_Arguments;
或
private ByteBuffer [] m_Arguments;