반응형

클라이언트, 서버 간의 통신 시에 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[];

}

위와 같은 것도 가능하다는 거죠.


참고하시기 바래요. ^^

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기