
APK에 데이터 파일 넣어 사용하기
안드로이드 설치 패키지인 APK 파일에는 이미지, 문자열 등과 같은 데이터뿐만 아니라 임이의 데이터 파일도 넣어 사용할 수 있습니다. 이러한 임이의 데이터 파일은 res 폴더의 서브 폴더인 raw를 직접 만들어 넣어주면 됩니다.

이러한 방식으로 데이터 파일을 저장해 두면 다음의 코드를 통해 해당 데이터 파일에 접근할 수 있는 InputStream 객체를 얻을 수 있습니다.
InputStream database_db =
map.getContext().getResources().openRawResource(R.raw.database_db);
이제 이 InputStream 객체를 통해 원하는 디렉토리에 해당 데이터 파일을 복사하고 사용할 수 있습니다. 아래의 코드는 InputStream 객체에 담겨진 데이터를 원하는 파일명으로 저장해 주는 함수입니다.
private boolean copy(InputStream in, String fileName) {
try {
OutputStream os = new FileOutputStream(fileName);
byte[] buffer = new byte[1024];
int bytesRead;
while((bytesRead = in.read(buffer)) !=-1) {
os.write(buffer, 0, bytesRead);
}
os.flush();
os.close();
} catch (IOException e) {
return false;
}
return true;
}
SQLite에서 몇 가지 SQL 문 정리
SQLite에서 몇가지 필요한 SQL 문을 찾아 정리해 봅니다. 기존의 SHP 파일의 속성 정보를 DBF 파일을 통해 사용했으나 몇가지 중요한 이유로 인해 SHP 파일의 속성을 DBF 파일이 아닌 SQLite로 대체하고자 함인데요. SQLite의 DB가 갖는 다음과 같은 장점을 갖고자 함입니다.
- DB가 단 하나의 파일로 구성되어 있어서 SHP 파일과 함께 쉽게 전달이 가능함
- SQL문의 WHERE 절을 통한 다양한 검색 조건을 줄 수 있음
- Index를 걸어 빠른 검색이 가능함
- 속성 값을 SQL의 UPDATE 문을 통해 쉽게 할 수 있음
SQLite의 DB 파일을 DBF 파일 대신 사용하기 위해 기본적으로 파악해야할 SQL 문은 다음과 같습니다. 먼저 SQLite 파일에 존재하는 테이블의 이름을 얻기 위한 SQL 문입니다.
SELECT name FROM sqlite_master WHERE type = 'table'
위의 SQL문의 실행 결과에 대한 예는 아래 그림과 같습니다.

다음은 특정 테이블을 구성하는 필드의 이름과 타입을 얻는 SQL 문입니다.
pragma table_info(TL_SCCO_EMD)
사실 위는 명령은 SQL 문이 아닙니다. 여튼 위의 결과에 대한 예는 아래와 같습니다.

그리고 해당 테이블의 레코드 개수를 얻는 SQL문은 다음과 같습니다.
SELECT COUNT(*) FROM TL_SCCO_EMD
위의 SQL 문의 결과에 대한 예는 다음과 같습니다.

[Java] 한글 문자열에서 초성 얻기
예를 들어, ‘대한민국’의 첫자인 ‘대’의 초성을 얻는 코드입니다. ‘대’의 초성은 ‘ㄷ’입니다. 아래의 함수 코드는 ‘대한민국’과 같은 문자열을 인자로 받아 그 결과로 ‘ㄷ’ 문자열을 반환하는 함수입니다.
String getInitialSound(String text) {
String[] chs = {
"ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ",
"ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ",
"ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ",
"ㅋ", "ㅌ", "ㅍ", "ㅎ"
};
if(text.length() > 0) {
char chName = text.charAt(0);
if(chName >= 0xAC00)
{
int uniVal = chName - 0xAC00;
int cho = ((uniVal - (uniVal % 28))/28)/21;
return chs[cho];
}
}
return null;
}
위의 함수를 간단히 테스트하는 코드 예는 아래와 같습니다.
System.out.println(getInitialSound("자바"));
결과는 ‘ㅈ’입니다.
[Java] AES 암호화
자바에서 문자열에 대한 암호화 방법입니다. 문자열이므로 특정한 데이터 형식, 즉 바이너리까지 포함하여 암호화가 가능합니다. 사용방법은 다음과 같습니다.
public static void main(String[] args) {
try {
String e = StringCrypto.encrypt(
"GEOSERVICE",
"안녕하세요, 2014년 새해 복 많이 받으세요!"
);
System.out.println(e);
String d = StringCrypto.decrypt("GEOSERVICE", e);
System.out.println(d);
} catch (Exception e) {
e.printStackTrace();
}
}
문자열에 대한 암호화를 작업시에 간단히 할 수 있도록 StringCrypto라는 클래스로 묶었습니다. 이 클래스는 Java에서 이미 구현한 암호화 알고리즘 중에 AES를 사용합니다. 실행 결과는 다음과 같습니다.

첫줄은 ‘안녕하세요, 2014년 새해 복 많이 받으세요!’에 대한 문자열을 암호화하여 HEX 코드로 표시한 것이고 다음 줄은 HEX 코드로 암호화된 것을 다시 복원한 것입니다. 아래는 위의 코드와 함께 StringCrypto 클래스에 대한 소스의 다운로드입니다.
2014년, 새해 복 많이 받으시고 좋은 일만 가득하시기 바랍니다. ㅡ !
