[JAVA] XML 직렬화도구 - Simple Framework

사용자 삽입 이미지


개발을 하다보면 XML 문서를 생성하거나, 다른 위치에 있는 문서를 파싱처리 해야 할 일들이 생긴다. 최근 안드로이드 내장 달력의 소스코드를 살펴보다가 문득 이상한 어노테이션을 발견했다. 그 소스코드에 파서는 존재하지 않았다. (안드로이드 소스코드에서 심플 프레임워크를 사용했는지는 잘 모르겠다)

이건 또 뭔가 싶어서 궁금해 하고 있던 찰나,
2011 자바 컨퍼런스에 방문했다가 이놈의 정식명칭과 경로를 알 수 있었다.

심플 프레임워크란, XML 직렬화 도구이다.
자바코드에서의 POJO라 불리는 것들... 즉 Value Object (VO)를 생성할때에 각 프로퍼티에 특별한 어노테이션을 설정해줌으로써 XML 코드로의 변환이 용이하게 해주는 역할을 한다. 이놈은 루트 엘리먼트, 이놈은 어트리뷰트!! 라고 명시해준다는 말이다.

아래는 IBM 개발자센터에서 이러한 내용으로 한페이지 분량으로 강좌를 적어논 경로이다.
2010년에 작성된 내용인데, 난 이제서야 확인했다. 나같은 분들이 혹시 생길것 같아 포스팅한다.

강좌경로 : http://www.ibm.com/developerworks/kr/library/x-simplexobjs/index.html?ca=drs-kr-1124

'기술참고자료 > JAVA' 카테고리의 다른 글

How to add SVN plugin for STS ?  (0) 2011.12.20
[JAVA] Hashmap & List 정렬기법  (0) 2011.05.02
HttpClient의 심플한 사용  (0) 2011.03.21
List Sort Sample Using Comparator<T> Interface  (0) 2011.03.17
DOM Parser vs SAX Parser  (0) 2011.03.17

[Android] TextView에서 볼드체 쓰기

TextView에서 볼드체를 표현하는 가장 간단한 방법은 다음과 같습니다.

textView.setText(Html.fromHtml("<b>string</b>"));


하지만 이 방법에는 약간의 오버헤드가 있습니다.
ListView에서 사용되는 문자열에 볼드체를 사용하기 위해 이방법을 사용하면
스크롤시 화면이 부드럽게 움직이지 않습니다.
모든 아이템에 미리 생성해논 문자열을 재사용한다면 문제 없겠지만
표현될 컨텐츠에 따라 변화되는 문자열이라면
각 뷰마다 새로 생성된 문자열에 스타일을 적용하는 수밖에 없습니다.
이말은 화면에 표시될 아이템의 갯수만큼 Html 클래스의 파싱 과정이 수행된다는 뜻입니다.
결과적으로 파싱에 따른 오버헤드 때문에 스크롤이 부드럽지 않게 됩니다.

이에 대한 대안으로 SpannableStringBuilder를 사용할 수 있습니다.
사용법은 다음과 같습니다.

SpannableStringBuilder sb = new SpannableStringBuilder();

String str = "test";

sb.append(str);

sb.setSpan(new StyleSpan(Typeface.BOLD), 0,
                                            str.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

textView.setText(sb);

사실 Html 클래스도 위와같은 방법을 사용합니다. 하지만 Html 태그를 사용하면 변환 과정에 더불어 파싱 과정이 추가되기 때문에 그만큼 오버헤드가 늘어납니다. 물론 문자열내에 다양한 스타일을 사용하는 경우 위의 방법으로 하나씩 스타일을 적용시키는 것보다 Html클래스가 효율적일 수 있습니다만 ListView 같은 경우 각 아이템마다 파싱 과정이 별도로 이루어지기 때문에 효율이 좋지 않다고 할 수 있겠습니다.

java에서 클래스 명, 라인 번호 찍기

java에서 php의 __FILE__ __LINE__과 유사한 기능을 구현하는 방법!!!


String a = "hahaha";

System.out.println("===========디버깅 시작했다~================");
System.out.print("file:" + (new Throwable()).getStackTrace()[0].getClassName() + "  line");
System.out.println((new Throwable()).getStackTrace()[0].getLineNumber());
System.out.println(a);
System.out.println("===========디버깅 끝났다~================");



eclipse의 경우 템플릿을 지정해놓으면 더 쉽게 할 수 있다.

도구->환경설정->Java->편집기->템플리트

새로작성

이름: dprt
컨텍스트: java
자동삽입에 체크
설명: 디버깅용 프린트
패턴:
//* debugging~~ ${date} ${time}
System.out.println("===========디버깅 시작했다~================");
System.out.println("time:" + new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date()));
System.out.print(new Throwable().getStackTrace()[0].getClassName() +"." + new Throwable().getStackTrace()[0].getMethodName() + "()" );
System.out.println("  line: " + new Throwable().getStackTrace()[0].getLineNumber());
System.out.println(${cursor});
System.out.println("===========디버깅 끝났다~================");
// the end of debuuging.. */

요렇게 넣고 확인하면..
java 코드에서 "dprt"라고 치고 ctrl+space 치면 위의 구문들이 찍힌다. 디버깅용으로 굉장히 편하다.
log4j 써도 된다~

출처 : http://iilii.egloos.com/2856745

[리눅스] ip 중복 문제

하...

오늘 허브에 연결된 CentOS와 윈도우XP의 아이피가 같다는 사실을 알게되었다. 

이럴수가... 이유를 찾아보니, 아래와 같은 글이 있었다.

어떻게 하나의 네트워크에서 같은 아이피를 가질 생각을 하는거지...?


ip 중복 문제
리눅스가 ip 중복문제에 약하다.
MS의 경우 선선점시  후선점자는  쓰지 못하였지만 리눅스의 경우 후선점자가 우선한다.

ip주소 변경시 Service 재시작

Service Network restart

출처 : http://blog.daum.net/_blog/BlogTypeView.do?blogid=0K8Dl&articleno=6661317&_bloghome_menu=recenttext#ajax_history_home

[리눅스] netstat 명령으로 포트확인하기

시스템 명령어인 netstat 를 사용하는 방법
#netstat -nap (열려 있는 모든 포트)
#netstat -l 또는 netstat -nap | grep LISTEN (LISTEN 되는 모든 포트)
#netstat -nap | grep ESTABLISHED | wc -l ( 모든 서비스 동시 접속자 수)
#netstat -nap | grep :80 | grep ESTABLISHED | wc -l ( 웹 동시 접속자 수)


포트스캔 명령어로 확인 하는 방법
# TCP 포트 확인 방법
nmap -sT -p 1-65535 localhost
# UDP 포트 확인 방법
nmap -sU -p 1-65535 localhost
# 네트워크에 열린 포트 확인
nmap -sX -p 22,53,110 211.239.111.*

lsof 명령어로 확인 방법
# 모든 네트워크 소켓 확인
lsof -I