클라이언트 - 서버 통신과 관련된 프로젝트에서 작업하고 메시지를 사용하여 통신합니다. 그러나 여러 가지 메시지 유형이 있기 때문에 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
}
}
클라이언트와 서버 측에는 메시지 유형별로 등록되고 수신 메시지에서 실행되는 MessageHandler가 있습니다. 자바에서는 원시 dataypes가 객체가 아니므로 객체 또는 객체에서 원시 데이터 유형으로 변환 할 수 없기 때문에이 문제가 발생합니다. 어떤 방식 으로든 제가 이것을 성취 할 수 있습니까? 그리고 이것은 어떤 이름이나 디자인 패턴과 같은 것이 있습니다 ...
Integer, Double, ... 클래스를 사용할 수는 있지만 Integer 클래스 때문에 네트워크를 통해 더 많은 바이트를 보내야합니다. 원시 데이터 유형보다 많은 바이트의 비용이 들며 바이트의 많은 부분을 보내고 싶지 않습니다. 나는 ... 가능한 한 낮은으로
편집을 메시지 크기를 유지하고 싶은 : 내가 얘기를 깜빡 했네요, 여러 클라이언트와 하나 개의 서버가 ...
주 :'@Override public void toString() {}'은 컴파일되지 않습니다. @Override가 아니면 안된다. public String toString() {}' –
네, 맞아요. 그것을 지적 해 주셔서 고마워요, 직접 프로젝트에서 붙여 넣지 코드를 입력했다 ... – clzola
또한 메서드 이름은 소문자로 시작해야합니다. 어쨌든 당신은 너무 일찍 최적화한다고 생각합니다. 박스형 데이터 유형을 사용하고 필요한 경우 실제 트래픽을 기반으로 최적화 할 것입니다. 프리미티브를 넘겨 주면 여전히 어떤 유형인지 알 필요가 있습니다 (0은 int, long, double 또는 값이 전혀 제공되지 않는다는 것을 어떻게 알 수 있습니까?). – NeplatnyUdaj