2016-07-05 1 views
-1

Java 파일 다운 로더에서 작업 중이므로 앱이 있거나 앱이없는 비디오 파일을 다운로드 했으므로 해당 파일 간의 파일 크기 차이를 확인했습니다. 그리고 Java 응용 프로그램을 사용하여 다운로드 한 파일을 열 수 없습니다. 메모장 + +를 사용하여 열면 무작위로 기호가 생성됩니다. 내가 뭘 잘못하고 있니?파일을 다운로드하는 동안 파일 크기가 다른 경우

http://i.imgur.com/lKaofVg.png 여기에 무작위로 생성 된 물음표가 있습니다. http://i.imgur.com/8bLC2R7.png - 원본 파일에는 존재하지 않습니다. http://i.imgur.com/H3MGgwl.png - 여기에 파일 크기가 있습니다. 생성 된 파일에 "+"를 두었습니다. 이 질문에 감사

 String currentRange = "bytes=0-"+num*13107200; 
     System.out.println(num + " is executing"); 
     URL file = new URL(url); 
     FileOutputStream stream = new FileOutputStream("tmp"+num+".mp4"); 
     HttpURLConnection urlConnection = (HttpURLConnection) file.openConnection(); 
     urlConnection.setRequestProperty("Range", currentRange); 
     urlConnection.connect(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(
       urlConnection.getInputStream())); 
     String inputLine; 

     final PrintStream printStream = new PrintStream(stream); 
     while ((inputLine = in.readLine()) != null) 
      printStream.println(inputLine); 
     in.close(); 
     printStream.close(); 
+3

처리를 위해 독자/작가/PrintStreams를 사용하지 마십시오 이진 파일은 텍스트 데이터 전용입니다. 원시 스트림을 사용하십시오. –

+4

mp4 파일은 바이너리 파일입니다. 텍스트 편집기로 열면 읽을 수있는 텍스트를 볼 수 있습니다. 바이너리이기 때문에 텍스트를 읽을 수있는 Reader를 사용해서는 안됩니다. InputStream을 사용하십시오. 텍스트 파일을 포함하여 모든 파일에 적용되는 그대로 파일을 다운로드하기 만하면되므로주의하십시오. –

+1

''readLine()''는 각 줄 바꿈마다 데이터를 분할합니다. 그렇게하지 않으면 원시 이진 데이터를 읽는 중입니다. 그리고 왜 당신은 메모장 + +와 비디오 파일을 열고 "무작위로 생성 된 기호"를보고 놀랍니? 그 밖의 무엇을 기대 했습니까? – f1sh

답변

0

이 코드를 사용하여 해결할 : 여기

내 코드의 Reading binary file from URLConnection와 @

piet.t
InputStream input = urlConnection.getInputStream(); 
      byte[] buffer = new byte[4096]; 
      int n = - 1; 
      while ((n = input.read(buffer)) != -1) 
      { 
       stream.write(buffer, 0, n); 
      } 
관련 문제