Я работаю над проектом, который включает взаимодействие клиент-сервер, и они обмениваются сообщениями. Но поскольку есть разные типы сообщений, я решил создать класс Message.Java, поместив все типы данных в один массив
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, которые зарегистрированы по типу сообщения и исполняются на сообщения за полученный. В этом вопросе у меня проблема, потому что примитивные dataypes в Java не являются объектами, и с тех пор я не могу их отличать в объекте или от объекта до примитивного типа данных. Есть ли способ, которым я могу это усвоить, и имеет ли это какое-то имя или что-то вроде шаблона проектирования ...
Я мог бы использовать классы Integer, Double, ..., но для этого потребуется отправить больше байтов по сети, поскольку класс Integer стоит больше байтов, чем примитивный тип данных, и я вроде бы не хочу отправлять столько байтов. Я хотел бы сохранить размер сообщения как можно более низко ...
EDIT: Я забыл упомянуть, есть несколько клиентов и один сервер ...
Примечание: '@Override public void toString() {}' не будет компилироваться. Это должно быть '@Override public String toString() {}' –
Да, вы правы. Спасибо, что указали на это, я набирал код напрямую, не выкладывая его из проекта ... – clzola
Также имена методов должны начинаться с строчных букв. В любом случае, я думаю, что вы слишком рано оптимизируете. Я бы пошел с коробчатыми типами данных и оптимизировал, основываясь на каком-то реальном трафике, если это необходимо. Если вы будете передавать примитивы, вам все равно нужно знать, какие они есть (как вы можете сказать, что 0 - это int, long, double или что значение вообще не предоставляется?). – NeplatnyUdaj