Notice
Recent Posts
Recent Comments
Link
설.현.아빠
[2011.02.09] 웹에서 파일 다운로드해보기. 본문
그냥 함 해봤다...역시 한방에 안되더군...ㅋㅋㅋ
여러가지 문제들을 겪으면서 드뎌 완성해보았다..(아직 몇가지 문제점들이 남아있지만..)
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... 이런식으로 왔다갔다 하지만 속도가 좀 더 향상되지 않았을까? 싶다...ㅋㅋ
'안드로이드 > File' 카테고리의 다른 글
코드상에서 SDcard에 폴더 생성하기. (0) | 2011.02.11 |
---|---|
IO Stream을 이용한 copy코드의 실행속도 테스트. 요거요거 끝내주네^^ (0) | 2011.02.11 |
[Java2] URL을 화일로 저장하는 예제 입니다.. (0) | 2011.02.11 |
url에서 파일 다운로드 (0) | 2011.02.11 |
웹에 존재하는 파일 SD Card에 다운로드하기. (0) | 2011.02.11 |
Comments