Notice
Recent Posts
Recent Comments
Link
관리 메뉴

설.현.아빠

[2011.02.09] 웹에서 파일 다운로드해보기. 본문

안드로이드/File

[2011.02.09] 웹에서 파일 다운로드해보기.

설.현.아빠 2011. 2. 11. 10:27



그냥 함 해봤다...역시 한방에 안되더군...ㅋㅋㅋ

여러가지 문제들을 겪으면서 드뎌 완성해보았다..(아직 몇가지 문제점들이 남아있지만..)

private void DownloadImage() {
String src = "http://cfs.tistory.com/custom/blog/70/705378/skin/images/image.png";
String des = "sdcard/imsi/image.png"; 
                File directory = new File("/sdcard/imsi");
if(!directory.isDirectory()) {
directory.mkdirs();
}
                // 두번째 문제가 발생한곳. 처음엔 sdcard/folder/image.png 로 넣었더니 안되더군..
                // 그리하여 폴더를 생성하고 파일을 저장하도록 추가하였다!!
InputStream in = null;
OutputStream out = null;
//File f = new File(des);
                byte[] buffer = new byte[2696]; // 추가 수정사항. 속도 향상을 위하여 byte[] 배열 선언.
try {
                        File f = new File(des);
                        f.createNewFile()
                        out = new BufferedOutputStream(new FileOutputStream(des));
in = new BufferedInputStream(new URL(src).openStream(),10240);
                        // 첫번째 문제가 발생한곳. buffer의 size를 조절해 주었다. 자꾸 8k...8k...ㅋㅋ 일단 1024로 buffer 크기 조절.
                        // 추가 수정사항. 더 큰 용량의 파일을 받기 위해서 버퍼의 크기를 10MG로 늘렸다.
/*
                        if(f.createNewFile()) {
out = new BufferedOutputStream(new FileOutputStream(des));
}*/
int read;
while (true) {
  // 추가 수정사항. 속도 향상을 위하여 byte[] 배열로 읽어 오도록 수정함.
read = in.read(buffer);
if (read == -1)
break;
out.write(buffer,0,read);
}
Toast.makeText(KensCafe.this, "Success!!!", Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
Log.d("dodo4989","Movie download FileNotFoundException");
} catch (IOException e) {
// TODO Auto-generated catch block
Log.d("dodo4989","Movie download IOException ");
} finally {
if (in != null)
try {
Log.d("dodo4989","Movie download FINISH ");
in.close();
out.flush();
out.close();
} catch (IOException e) {
Log.d("dodo4989","Movie download IOException");
// TODO Auto-generated catch block
}
if (out != null)
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
}

여전히 남아 있는 문제....도중에 자꾸 request error가 발생한다...흠..에뮬이라 그런가...속도도 느리고...
집에가서 폰에서 직접 해봐야겠다^^ 아! ProgressBar하나 넣어주는게 시각상 좋을듯..몰래 다운로드는 별로...

추가 수정사항을 통해 속도가 향상된건지는...잘.....ㅋㅋ 일단은 에뮬에서 3MB의 파일을 웹으로부터 다운로드해서 파일에 Write하기 까지 대략 10초정도가 소요되었다. 흠...70MB면...1분이상이 걸릴려나..나중에 확인함 해봐야지.
어플에 동영상과 mp3파일을 포함시켰더니 어플 용량이 15MB를 넘어 버렸다...
웹에서 받아오도록 변경시켜야 하나...





[2011.02.14] 단말기를 통해 6MB의 동영상 파일을 다운로드 받도록 시험해보았다...결과는 참패...1분 40초나 걸리는 낭패를 맛보았다..

이런 상태로는 안될꺼같아서 여러가지 테스트를 해보고 약 10회정도 테스트후 

in = new BufferedInputStream(new URL(src).openStream()); 이렇게 변경하기로 한다. 6MB동영상을 웹으로 부터 다운로드하여 

파일로 저장하는데 걸리는 시간은 약 1분 10초가량이 소요된다. 물론 3G데이터를 통하여 다운로드 했을 경우이고, Wifi 환경에서도 

차후 테스트할 예정 이다. 중간에 데이터 관련 다른작업을 한다면 시간은 2분을 넘기도하였으나 이는...사용자에게 맡기자.ㅋ
 
추가로 read 값을 로그로 찍어보니 1024, 324, 1024, 324, 1024, 324로 데이터를 받아오고 있었다.
 
좀 더 속도향상을 바라면서 byte[] buffer = new byte[1348]; 이렇게 바꿔보았다...그랬더니 1348, 1348, 1348...로 받아오고 있다.
 
그럼....이번엔 1348*2=2696 이니까...ㅋㅋ byte[] buffer = new byte[2696]; 요렇게 바꿨지.
 
머...1348,2696,2696,2696,1348... 이런식으로 왔다갔다 하지만 속도가 좀 더 향상되지 않았을까? 싶다...ㅋㅋ

Comments