월별 글 목록: 2015년 10월월

자바에서 unsigned 타입을 사용하는 프로토콜을 처리하기 위한 클래스들..

자바(Java)를 사용해서 개발한 서비스나 애플리케이션에서 C/C++로 개발된 서버에 연결해서 데이터를 전송하거나 수신하는 경우에 unsigned로 인해서 통신에 불편함이 발생하게 된다. 그래서 이런 문제를 쉽게 해결하기 위해서 구글에서는 프로토콜 버퍼(https://developers.google.com/protocol-buffers/), 스리프트(페이스북에서 개발해서 아파치에 기증, https://thrift.apache.org/)와 같은 직렬화 라이브러리를 많이 사용하고 있다.
그래도 이런 직렬화 라이브러리를 사용하지 않고, unsigned 타입을 프로토콜로 사용하는 서버와 통신하기 위해서 unsigned를 처리하는 자바 클래스 몇 개를 살펴보자. 아래 클래스는 1, 2, 4 byte의 배열을 읽어서 2, 4, 8 byte의 데이터 타입으로 사용하고, 2, 4, 8 byte를  unsigned 1, 2, 4 byte로 변경하는 코드이다.

1. UnsignedByte

public class UnsignedByte {

    public static short parse( byte[] data, int offset ) {
        return (short)(data[offset] & 0xff);
    }

    public static short parse( byte[] data ) {
        return parse( data, 0 );
    }

    public static byte[] parse( short number ) {
        return new byte[] { (byte)(number & 0xff) };
    }

}

2. UnsignedShort

public class UnsignedShort {

    public static int parse( byte[] data ) {
        return parse( data, 0 );
    }

    public static int parse( byte[] data, int offset ) {
        return ((data[offset] & 0xff) << 8) | (data[offset+1] & 0xff);
    }

    public static byte[] parse( int number ) {
        byte[] data = new byte[2];

        data[0] = (byte)((number >> 8) & 0xff);
        data[1] = (byte)(number & 0xff);

        return data;
    }

}

3. UnsignedInt

public class UnsignedInt {

    public static long parse( byte[] data ) {
        return parse( data, 0 );
    }

    public static long parse( byte[] data, int offset ) {
        return (((long) data[offset] & 0xffL) << 24)
             | (((long) data[offset+1] & 0xffL) << 16)
             | (((long) data[offset+2] & 0xffL) << 8)
             |  ((long) data[offset+3] & 0xffL);
    }

    public static byte[] parse( long number ) {
        byte[] data = new byte[4];
        
        data[0] = (byte) ((number >> 24) & 0xff);
        data[1] = (byte) ((number >> 16) & 0xff);
        data[2] = (byte) ((number >> 8) & 0xff);
        data[3] = (byte) (number & 0xff);

        return data;
    }

}

* Reference
https://github.com/ryantenney/oscar

IntelliJ/Android Studio Open Current Activity 플러그인

인텔리J나 인텔리J 기반의 IDE인 안드로이드 스튜디오에서 안드로이드 개발을 하면서 유용한 플러그인의 하나인 Open Current Activity에 대해서 살펴보자. 이 플러그인의 이름만으로도 어떤 기능을 제공하고 있는지 어렵지 않게 유추할 수 있다.

  1. 기능

    • 바로 에뮬레이터나 기기에 연결해서 보고 있는 앱 화면의 Activity로 바로 이동할 수 있는 플러그인이다.
  2. 설치 및 다운로드

    • 안드로이드 스튜디오의 경우에는 플러그인 설치 윈도에서 찾을 수가 없어서 다운로드 해서 설치하도록 하자. 설치 방법은 이 페이지(https://plugins.jetbrains.com/plugin/7877)에서 jar 파일을 다운로드 하고, Preference > Plugins > Install plugin from disk… 버튼을 클릭해서 다운로드 한 jar 파일을 로딩한다. 마지막으로 안드로이드 스튜디오를 재시작한다.
  3. 사용방법

    • 사용방법은 에뮬레이터나 기기를 연결해서 개발 중인 앱을 실행시킨다. 그리고 화면을 보는 상황에서 메뉴의 Navigate > Current Activity 메뉴를 찾아서 클릭한다. 이제 화면에 보고 있는 Activity가 에디터 창에 뜨는 것을 확인할 수 있다.

안드로이드를 개발하면서 화면을 이동하고, 이동한 화면에서 문제를 발견하면 어떤 Activity나 Fragment인지 찾아서 수정해야 하는데, 이 찾는 과정이 조금 시간이 걸리기도 하지만 기억력의 한계로 가끔은 짜증을 유발하기도 한다. 그래서 이 플러그인은 많은 안드로이드 개발자들에게 유익한 플러그인이 될 것으로 생각한다.

아래 화면은 플러그인 개발 사이트에서 보여주는 예시화면이다.