'Programming/Java'에 해당되는 글 10건

  1. 2013.10.26 SAX/DOM
  2. 2013.10.26 JAVA IO/NIO
  3. 2013.10.26 반복문, Static, instanceof
  4. 2013.10.26 Collection
  5. 2013.10.26 String vs Buffer vs Builder
  6. 2011.06.02 제네릭
  7. 2011.05.30 2011 제 11회 한국자바개발자 컨퍼런스
  8. 2011.05.19 한줄 if 문
  9. 2011.05.10 RMI 프로그래밍 용어 정리
  10. 2011.03.15 Java 파싱 RTF to String
Programming/Java2013. 10. 26. 19:45

SAX/DOM

SAX                 DOM

속도 1.929ms     6,468ms <- 같은 파일의 경우 3배정도 차이

메모리 56mb         292mb <- 같은 파일의 경우 5배정도 차이


같은 XML 파일을 처리할 때 SAX가 속도면에서나 메모리면에서나 빠르다.

하지만 다루기는 DOM이 편하고 쉽다.

Posted by Brian B. Lee
Programming/Java2013. 10. 26. 19:41

JAVA IO/NIO (10mb 읽기/쓰기)

    버퍼 없는 FileReader 버퍼있는 FileReader BufferedReader(줄 단위로 읽기 제공)

속도     2,480ms (느림)         400ms (빠름)         350ms (조금 더 빠름)


    BufferedReader(IO) MappedByteBuffer(NIO) TransferTo(NIO)

속도     422ms 320ms         310ms


프로그램을 만들다 보면 IO를 많이 사용한다 .ex) config 파일을 읽는 일 등

그래서 설정파일을 읽을 때마다 수정되었는지 확인한다면 이를 데몬(Daemon) 스레드를 하나 생성하여 5~10분마다 확인하게 하는 것이 수정되었는지 안되었는지 확인하는 것보다 속도를 향상시킬 수 있다.


NIO가 IO보다 빠른 이유는 non-blocking(비봉쇄)과 asynchronous(비동기) 때문이다.

참조. http://devsw.tistory.com/142

Posted by Brian B. Lee
Programming/Java2013. 10. 26. 19:18

반복문

for의 3가지 방법

for1. for(int i =0; i < v.size; i++)

for2. int vSize = v.size; for(int i =0; i < vSize; i++)

for3. for(String temp;v)

속도 for3 < for1 < for2 (가장 편하지만 for3이 가장 느리고 매번 사이즈 값을 가져오는 for2가 느리고 for1이 짱)


Static

Static 초기화 블록

static staticVal;

static {

staticVal = “Static Value”;

}

Static과 메모리 릭

Why?? => Collection 객체를 Static으로 잡는 경우(가비지 컬렉터가 잡아낼 수 없고 데이터는 늘어만 날수 있다)


인스턴스 확인

Object obj; if(obj instanceof java.math.BigDecimal) {} (BigDecimal 클래스의 인스턴스인지 확인)

Posted by Brian B. Lee
Programming/Java2013. 10. 26. 19:10

Collection

동기화= 다중 스레드에서 데이터 처리를 보장

동기화되어 있는 클래스는 Vector와 Hashtable 밖에 없지만 다음과 같이해서 동기화 처리가 된다.

Set s = Collections.synchronizedSet(new HashSet(…));


블로킹 큐= 크기가 정해져있는 큐에 공간이 더이상 없을때, 공간이 생길때까지 대기

Set

속도: TreeSet < HashSet < LinkedHashSet (많이 차이 없음)

List

속도: ArrayList < LinkedList  < Vector (별 차이 없지만 LinkedList에서 값을 가져올때 poll대신 get을 사용하면 많이 느려진다.)

Map

속도: TreeMap >> HashMap > HashTable > LinkedHashMap (TreeMap 이 좀 느리고 나머지는 비슷)


사실 모두 속도가 비슷해서 어떤걸 사용해도 별 상관없다 하지만 안정적인걸 봤을때 Sun이 선정한 인터페이스별 클래스는 다음과 같다.

Set -> HashSet

List -> ArrayList

Map -> HashMap

Queue -> LinkedList

Posted by Brian B. Lee
Programming/Java2013. 10. 26. 19:07

String

String 값의 비교(==, equals, compareTo, Collator 클래스)

1. ==                        -> 값과 상관없이 같은 오브젝트인지 확인

2. equals                 -> 값이 같은지 확인

3. compareTo        -> int 값 반환 (같으면 0 다르면 크기에 따라 음수와 양수로 나누어짐)

4. Collator클래스    -> 자연어를 비교하여 순서 매길 때


StringBuffer vs        StringBuilder

스레드  안전                                 단일 스레드에서만 보장

속도  String보다 완전빠름 StringBuffer보다 좀 더 빠름

메모리  String보다 완전적음 StringBuffer와 같음


이유 = String의 경우 + 연산을 할때마다 세로운 주소지에 더해진 String 값을 저장한다. 하지만 StringBuffer와 StringBuilder의 경우 처음 주소지에 값만 추가된다.새로 메모리를 할당하고 값을 옮겨갈 필요가 없다.


비교

- String은 짧은 문자열을 더할 경우 사용한다.

- StringBuffer는 스레드에 안전한 프로그램이 필요할 때나, 개발 중인 시스템의 부분이 스레드에 안전한지 몰르 경우 사용하면 된다.

- StringBuilder는 스레드에 안전한지 여부가 전혀 관계 없는 프로그램을 개발할 때 사용하면 좋다.


생성자

- StringBuffer()                 => 기본 용량 16개의 char 이다.

- StringBuffer(CharSequence seq) => CharSequence는 CharBuffer, String, StringBuffer, StringBuilder의 인터페이스이며 생성된 StringBuffer는 실재로 seq에 대한 값을 갖는다.

- StringBuffer(int capacity) => capacity = 용량

- StringBuffer(String str) => str 값을 갖는 StringBuffer 생성



Posted by Brian B. Lee
Programming/Java2011. 6. 2. 14:52
1. 제네릭 클래스
public class ArrayList<E> extends AbstractList<E> implements List<E> ...{
public boolean add(E o)
}
- E(Element): 컬렉션에 저장하고 컬렉션에서 리턴할 원소의 유형 ex) String, int, ...
클래스 생성시 설정해준 E 값으로 클래스 안에서 사용 ex) ArrayList<String> a = new ArrayList<String>;

2. 제네릭 메소드
    
2.1 public <T extends Animal> void takeThing(ArrayList<T> list)
- Animal 클래스의 확장(extends)이나 구현(implements)만 객체로 받을 수 있다.
- public void takeThing(ArrayList<Animal> list) 과 다른 점은 이 메소드의 list 파라미터는
ArrayList<Animal> 만 가능하다 하지만 위의 경우 ArrayList<Animal> 뿐만아니라
Animal 클래스를 상속한 ArrayList<Dog>, ArrayList<Cat> 등도 다 가능하다.
     2.2 public static <T extends Comparable<? super T>> void sort(List<T> list)
- sort 메서드의 파라미터 List의 인자가 Comparable 클래스 유형이여야 한다.
- <? super T> 이건 Comparable의 유형 매개 변수가 T 또는 T의 상위 유형이어야 한다는 것 




Posted by Brian B. Lee
Programming/Java2011. 5. 30. 09:59
제 11회 2011 한국자바개발자 컨퍼런스



홈페이지는 http://kjdc.org/ 입니다.

자바 개발 뿐 아니라 요즘 이슈인 클라우드 컴퓨팅이라던지 데이터베이스, 아키텍처 관련 세션도 있네요.
관심 있으신분들은 행사일이 일요일이니 참석하면 좋을것 같습니다.

Posted by Brian B. Lee
Programming/Java2011. 5. 19. 00:05
조건문 ? 참일때 : 거짓일때
Posted by Brian B. Lee
Programming/Java2011. 5. 10. 23:49

마샬링(Marshalling): 직렬화(Serialize)하는 작업을 마샬링 이라 한다. 데이터를 특정 통신 채널로 보낼 수 있는 형태로 바꾸어 준다.
 

언마샬링(Unmarshaling): 역직렬화(Deserialize)하는 작업을 언마샬링 이라 한다. 변환된 데이터를 읽어 들여 원래의 형태로 변환한다.
 

스텁(Stub): 클라이언트 프로그램에서 원격 객체가 마치 로컬에 있는 것 처럼 보이도록 해준다. 즉, proxy 역할을 하는 작은 객체로 마샬링과 언마샬링 작업을 한다.
 

스켈레톤(Skeletion): 스텁과 반대로 서버 프로그램에서 스텁에서 보낸 데이터를 언마샬링해 해석하고 결과 데이터를 마샬링해서 클라이언트로 보낸다.

  - 스텁과 스켈레톤의 더 자세한 사항 다음 블러그를 참조: http://cafe.naver.com/q69/116975 -

참고: Serialize와 Synchronize는 전혀 다른 개념이다. Synchronize는 스레드에서 동기화 문제때 사용된다.

Posted by Brian B. Lee
Programming/Java2011. 3. 15. 09:55
String str = 'RTF 값';
  
byte[] bytes = null;
bytes = str.getBytes();
InputStream is = new ByteArrayInputStream(bytes);   
   
try {
//   rtf 파일의 경우
//   FileInputStream is = new FileInputStream("a.rtf");
RTFEditorKit kit = new RTFEditorKit();
Document doc = kit.createDefaultDocument();
kit.read(is, doc, 0);
String plainText = doc.getText(0, doc.getLength());
System.out.println("text:" + new String(plainText.getBytes("8859_1"),"KSC5601"));
} catch (Exception e) {
// TODO: handle exception
}

참고: DB에서의 한글 charset 변환

DB 입출력 기능을 하는 부분을 다음과 같은 형식으로 수정해 주면 됩니다.

ISO8859 인 DB에 한글을 넣을 땐 다음과 같은 코드를 사용합니다.

String str = "한글";

String result = new String(str.getBytes("KSC5601"),"8859_1") ;

DB에서 받아올 땐 앞 뒤의 charset을 표현하는 문자열의 위치를 바꾸면 됩니다.

String str = rs.getString();

String result = new String(str.getBytes("8859_1"),"KSC5601") ;

Posted by Brian B. Lee