안드로이드 개발 질문/답변
(글 수 45,052)
서버와 연결이 성립되었고..
서버에 요청을 하는데 코드 이해가 잘안되네요
public static boolean write(String args) {
Log("writestring");
byte buffer[] = null;
buffer = utfToByte(args);
Log("writestring = success");
return write(buffer);
}
public static boolean write(byte[] args) {
Log("writebyte");
byte buf[] = new byte[4];
int length = args.length;
for (int i = 0; i < 4; i++) {
buf[3 - i] = (byte) ((length >> (i * 8)) & 0xff); ㅡ>특히 이부분에 대해서는 힘드네요ㅜㅜ
}
try {
mOutputStream.write(buf, 0, 4);
mOutputStream.write(args, 0, length);
mOutputStream.flush();
} catch (Exception e) {
Log("write = " + e.toString());
}
Log("writebyte = success");
return true;
}
오버로딩을 사용해서 저렇게 쓰는것두 이해가 잘안되네요ㅜㅜ




한줄 요약 : 서버에 args의 크기를 전송하는데 이는 int형이고 int형은 플랫폼에 따라 빅인디언과 리틀인디언 나뉘므로 이를 통일시켜주기위해 위와 같은 작업을 합니다.
///////
서버에 임크기의 바이트 배열을 전송할때 서버에 이 바이트 배열의 크기가 얼마라는걸 알려주고
그후 서버에 전송합니다. 그래야 서버가 바이트 배열을 모두 수신후 다음 바이트배열 수신을 대기하지 않고
클라이언트와의 통신을 종료 할 수 있죠.
헌데 여기서 생각행야하는것이
이 바이트 배열의 크기(여기선 args의 크기) int 형이라는겁니다.
int형 배열의 크기 값을 통신을 할때 기본 데이터 형태인 바이트 형으로 변환하고 전송을 하게 되는데
int형은 2가지정도로 표현 방법이 있습니다.
빅 인디언 방식
리틀 인디언 방식
이 인디언 방식은 플랫폼에 따라(OS혹은 CPU) 바뀌게되는데
세상엔 참 많은 종류에 플랫폼이 존재하죠 따라서
서버에 전송할 방식을 정하고 그에 맞춰서 int 형을 전송하기위해
이해가 가지 않으시다는 방식 처럼 변경하여 데이터를 전송합니다.
아 참고로 기본적으로 네트워크 통신은 빅 인디언방식이 기본입니다.