안드로이드 개발 질문/답변
(글 수 45,052)
브라우져의 링크를 통해서 다운로드 할 때
다운로드 파일을 지정된 경로로 저장 시키는 방법이 있나요?
자체 다운로드 방식은 너무 느려서 사용하지 못할 것 같아서요(22메가 받는데 약 20~30분 이상 걸림)
답변해주시면 감사하겠습니다.
다운로드 파일을 지정된 경로로 저장 시키는 방법이 있나요?
자체 다운로드 방식은 너무 느려서 사용하지 못할 것 같아서요(22메가 받는데 약 20~30분 이상 걸림)
답변해주시면 감사하겠습니다.
2010.09.14 10:08:16
질문과는 좀 다른이야기입니다만,,, 저장경로의 변경과 다운로드 속도와는 관련이 없을것 같은데요?
다운로드 속도는 기지국(3G)이나 Wi-Fi 의 속도와 관련이 있습니다. 물론, 해당 웹 서버의 속도가 일정하다는 가정하에서죠.
2010.09.14 10:12:05
제가
http://dingpong.net/tt/221
위 url 방식으로 sdcard 에 저장을 시키는 방법으로 구현을 해보았는데
다운로드 속도가 너무 낮아서 질문 드리는 것입니다.
wifi로 연결된 상태에서 속도가 너무 안나오는데 문제가 있는 것인지요.
브라우져를 통해서 다운로드 하게 되면 속도가 어느 정도 이상을 뽑아주는데 자체 다운로드 방식을 하니 속도가 너무 낮아서 그렇습니다.
http://dingpong.net/tt/221
위 url 방식으로 sdcard 에 저장을 시키는 방법으로 구현을 해보았는데
다운로드 속도가 너무 낮아서 질문 드리는 것입니다.
wifi로 연결된 상태에서 속도가 너무 안나오는데 문제가 있는 것인지요.
브라우져를 통해서 다운로드 하게 되면 속도가 어느 정도 이상을 뽑아주는데 자체 다운로드 방식을 하니 속도가 너무 낮아서 그렇습니다.
2010.09.14 10:28:22
해당 소스처럼 브라우저에서 얻어온 IO stream 을 가지고서, 이것을 read 하여 다시 write 를 하다보면 느려질 수 있습니다.
저장경로의 변경과는 무관하며, 위의 방법대로라면 어떤곳에 저장한다고 해도 결과는 비슷할것 같네요.
문제는 읽고 쓰는 방법에 있는것 같군요.
현재는 1바이트씩 읽어서 1바이트씩 쓰는 구조네요. 이렇게 되면 느려질 뿐 아니라, 전체적인 CPU점유율도 제법 될 것 같군요.
1바이트를 1024바이트 또는 그 이상으로 한번에 읽고쓰는 범위를 늘려보시거나,
전체를 한번에 다 읽은 후 한번에 쓰는 방법도 고려해보시기 바랍니다.
물론, 파일이 큰 경우, 한번에 다 읽으면 OutOfMemoryError 를 유발할 수 있으니 주의하여야 합니다.
위 방법들에 버퍼를 적용하여 약간의 향상도 기대할 수 있습니다.
즉, BufferedInputStream, BufferedOutputStream 을 쓰면 조금더 향상되기도 합니다.
또 다른 방법으로 java.io 대신, java.nio 를 쓰는 방법도 있지요.
아예 다른 방법으로는, 브라우저의 다운로드를 그대로 이용하시고, 다운로드 완료 후, File 의 renameTo 메소드를 이용하여 파일을 원하는 곳으로 옮겨주는 방법도 있습니다.