StringTokenizer 와 String.split() 의 속도 차이와 그 이유
StringTokenizer 관련 StackOverflow 게시글
첫번째 실험 : 구분자를 “,” 사용 / hasMoreTokens() 사용 안함 / nextToken() 한번 사용
splits ====== time : 271, clientIp : 192.168.1.1
tokenizer ====== time : 80, clientIp : 192.168.1.1
[출처] [StringTokenizer VS String.split] 누가 더 빠른가|작성자 평범한개발자
두번째 실험 : 구분자를 아스키코드가 아닌 문자 사용 / hasMoreTokens(), nextToken() 반복 사용
StringTokenizer 와 String.split() 의 속도 차이와 그 이유
// 위 링크에서 코드 발췌
@Test
public void getClientIpSplitTest() {
String clientIp = null;
long start = System.currentTimeMillis();
for(int i = 0; i < 1000000; i++) {
String xForwardedFor="192.168.1.1뛟127.0.0.1뛟127.0.0.2뛟127.0.0.3";
String[] splits = xForwardedFor.split("뛟");
if(splits.length < 1) clientIp = "";
else {
for(String str : splits) {
clientIp = str;
}
}
}
long end = System.currentTimeMillis();
log.info("splits ====== time : {}, clientIp : {}", end-start, clientIp);
}
@Test
public void getClientIpStringTokenizerTest() {
String clientIp = null;
long start = System.currentTimeMillis();
for(int i = 0; i < 1000000; i++) {
String xForwardedFor="192.168.1.1뛟127.0.0.1뛟127.0.0.2뛟127.0.0.3";
StringTokenizer tokenizer = new StringTokenizer(xForwardedFor, "뛟");
while(tokenizer.hasMoreTokens()) {
clientIp = tokenizer.nextToken();
}
if(clientIp == null) clientIp = "";
}
long end = System.currentTimeMillis();
log.info("tokenizer ====== time : {}, clientIp : {}", end-start, clientIp);
}
[출처] [StringTokenizer VS String.split] 누가 더 빠른가|작성자 평범한개발자
b. 결과 : 차이가 갑자기 확 좁혀졌다
splits ====== time : 257, clientIp : 127.0.0.3
tokenizer ====== time : 220, clientIp : 127.0.0.3
[출처] [StringTokenizer VS String.split] 누가 더 빠른가|작성자 평범한개발자
세번째 실험 : 두번째 실험에서 구분자 “하나” 추가 / hasMoreTokens(), nextToken() 반복 사용
"192.168.1.1뛟127.0.0.1뛟127.0.0.2뛟127.0.0.3뛟127.0.0.4";
splits ====== time : 270, clientIp : 127.0.0.4
tokenizer ====== time : 319, clientIp : 127.0.0.4
[출처] [StringTokenizer VS String.split] 누가 더 빠른가|작성자 평범한개발자