클라이언트, 서버 간의 통신 시에 Class객체를 통채로 송수신 해서 쓸 수 있으면 아주 편한점이 많죠.
JAVA를 사용하는 안드로이드 클라이언트와 Spring서버 간의 통신을 예로 들 수 있겠습니다.
그 외에도 JAVA로 만들어진 서버 간의 통신에서도 사용할 수 있을 것 같습니다.
안드로이드 <-> SpringBoot 기준으로 만든 샘플을 보시면 금방 이해 될 것 같네요.
1. 전달할 클래스 생성
(중요) 클라이언트, 서버의 패키지를 동일하게 해야 합니다.
package com.sample.response;
import java.io.Serializable;
public class Data1 implements Serializable { private int code; private String msg; private String data;
public int getCode() { return code; }
public void setCode(int code) { this.code = code; }
public String getMsg() { return msg; }
public void setMsg(String msg) { this.msg = msg; }
public String getData() { return data; }
public void setData(String data) { this.data = data; } }
|
2. 안드로이드
public class DataUtil { public static Object fromString(String s) throws IOException, ClassNotFoundException { byte [] data = Base64.decode(s, 0); ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream( data ) ); Object o = ois.readObject(); ois.close(); return o; }
public static String toString(Serializable o) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream( baos ); oos.writeObject(o); oos.close(); return new String(Base64.encode(baos.toByteArray(), 0)).replace("\n", ""); } }
|
3. 서버
public class DataUtil { public static Object fromString(String s) throws IOException, ClassNotFoundException { byte[] data = Base64.getDecoder().decode(s); ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data)); Object o = ois.readObject(); ois.close(); return o; }
public static String toString(Serializable obj) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(obj); oos.close(); return Base64.getEncoder().encodeToString(baos.toByteArray()); } }
|
클래스에 데이터를 넣은 후 보낼 때 toString을 써서 나온 String을 보내고 받는 쪽에서는 fromString해서 사용하면 됩니다.
String으로 변환하는 것은 Json도 가능한데요. 위의 방식은 byte데이터도 그대로 전달이 가능한 장점이 있습니다.
public class Data2 {
byte b1[];
byte b2[];
}
위와 같은 것도 가능하다는 거죠.
참고하시기 바래요. ^^
최근댓글