Java,将所有数据类型放在一个数组中

时间:2014-01-06 12:53:08

标签: java networking message

我从事涉及客户 - 服务器通信的项目,并使用消息进行通信。但由于存在不同类型的消息,我决定创建一个名为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类比原始数据类型花费更多的字节,我有点不想发送那么多字节。我想保持邮件大小尽可能低......

编辑:我忘了提及,有多个客户端和一台服务器......

1 个答案:

答案 0 :(得分:0)

U可以直接将数据存储为byte [],这样就可以在java中将所有原始数据类型转换为Byte,轻松查看ByteBuffer

而不是
       private Object [] m_Arguments;
可以使用
        private byte [] [] m_Arguments;

       private ByteBuffer [] m_Arguments;