※ Scanner가 그 흔히 말하는 전자기기 "스캐너"가 아님을 먼저 밝혀둡니다.
제가 이번 프로젝트를 하면서 자바에서 C의 fscanf와 같은 기능을 하는 것이 없을까 찾아보다가 알게된 클래스입니다. 자세한 정보는 여기를 클릭하시면 새창으로 안내됩니다.
그런데 이 Scanner에는 여러 메소드가 있는데, fscanf에서처럼 읽어온 파일에서 스페이스 등으로 띄어진 것
위와 같이 되있을 때, fscanf(f, "%d%d%d%d", &a, &b, &c, &d); 와 같이 받을 수 있는데, Scanner에도 이런 기능을 쓸 수 있는겁니다.
FileHandle file = Gdx.files.internal("Songs/DARK_ENVY/DARK_ENVY{n}.nmp"); Scanner sc = new Scanner(file.read()); bpm = sc.nextInt();
그런데 저렇게 하게되면 문제가 발생합니다. 무진장 느려집니다. 제 예전 노트맵파일을 읽어 본 결과 (노트수 204개) 5~6초정도의 로딩시간이 걸렸습니다 (...) 정말 너무하지 않나요? 물론 안드로이드에서의 로딩속도긴 하지만, 인간적으로 너무 오래걸립니다. 원인이 뭔고 하고 찾아봤더니 저 3번째 라인이 문제였습니다. sc.nextInt() 이놈이 너무 오랜시간동안 작업을 하는 겁니다. 그래서 저녀석을 아래처럼 바꿔주면 속도가 눈에 띄게 개선됩니다.
bpm = Integer.parseInt(sc.next());
이렇게 바꾸면 5~6초 걸리던 로딩속도가 1초대로 5배정도 빨라집니다. PC에서는 약 15ms정도 빨라지더군요. 애초에 PC에서의 204개 로딩속도는 0.1초도 안됐습니다 (...) PC와 안드로이드 기기의 성능차이라고 생각합니다 (하긴 i5 샌디브릿지랑 갤탭 싱글코어를 비교하는 것 자체가 무리)
이렇게 하나둘씩 제 게임에 최적화를 이뤄내고 있습니다 (...) 오늘은 노트에디터를 만들고자 합니다. 이제까지 한 작업중에서 가장 빡샐 것으로 예상됩니다 (?!!!)
'Study > Engine' 카테고리의 다른 글
libGDX에서 TTF를 BitmapFont로 가져다 쓰기! (0) | 2012.10.20 |
---|---|
jMonkeyEngine 3.0에서 안드로이드 버전으로 만드는 방법 (0) | 2012.09.27 |
안드로이드에서 외부저장소에 앱을 설치하게 하고싶을땐... (2) | 2012.02.13 |
Eclipse에서 알아두면 좋은 유용한 단축키 모음 (2) | 2012.02.08 |
안드로이드 개발 환경 구축하기 (4) | 2012.02.03 |