2

두 개의 미디어 폴더를 하나의 zip 폴더에 넣었으며 zip 폴더에 총 100,000 개의 미디어 파일이 있습니다. zip 폴더의 특정 폴더에서 하나의 파일을 재생해야합니다. 문제는 먼저 Zip 폴더의 전체 내용을 완전히 읽은 다음 필요한 파일에 액세스하는 것입니다. 따라서 하나의 파일을 재생하는 데 55 초 이상 걸립니다. 오디오 파일 재생에 소요되는 시간을 줄이기위한 솔루션이 필요합니다. 너무 많은 시간을 소비하기 때문이 아니라 파일을 다시 압축을 해제 할두 개의 폴더로 분리 된 100k 오디오 파일 모음에서 단일 오디오 파일을 재생하는 방법은 무엇입니까?

long lStartTime = System.currentTimeMillis(); 
      System.out.println("Time started"); 
      String filePath = File.separator+"sdcard"+File.separator+"Android"+File.separator+"obb"+File.separator+"com.mobifusion.android.ldoce5"+File.separator+"main.9.com.mobifusion.android.ldoce5.zip"; 
      FileInputStream fis = new FileInputStream(filePath); 
      ZipInputStream zis = new ZipInputStream(fis); 
      String zipFileName = "media"+File.separator+"aus"+File.separator+fileName; 
      String usMediaPath = "media"+File.separator+"auk"+File.separator; 
      ZipEntry entry; 
      int UnzipCounter = 0; 
      while((entry = zis.getNextEntry())!=null){ 
      UnzipCounter++; 
       System.out.println(UnzipCounter); 
       if(entry.getName().endsWith(zipFileName)){ 
        File Mytemp = File.createTempFile("TCL", "mp3", getActivity().getCacheDir()); 
        Mytemp.deleteOnExit(); 
        FileOutputStream fos = new FileOutputStream(Mytemp); 
        for (int c = zis.read(); c!=-1; c= zis.read()){ 
         fos.write(c); 
        } 
        if(fos!=null){ 
         mediaPlayer = new MediaPlayer(); 
        } 
        fos.close(); 
        FileInputStream MyFile = new FileInputStream(Mytemp); 
        mediaPlayer.setDataSource(MyFile.getFD()); 
        mediaPlayer.prepare(); 
        mediaPlayer.start(); 
        mediaPlayer.setOnCompletionListener(this); 
        long lEndTime = System.currentTimeMillis(); 
        long difference = lEndTime - lStartTime; 
        System.out.println("Elapsed milliseconds: " + difference); 
        mediaPlayer.setOnErrorListener(this); 
       } 
       zis.closeEntry(); 
      } 
      zis.close(); 

답변

2

시도 :

다음은 내 코드입니다. 대신 다시 압축을 풀고 파일을, 당신이 따라 할 수있는 다음 단계의 : 처음 응용 프로그램이 시작입니다

  1. 압축 해제 파일. 이전에 앱을 시작한 플래그를 설정하고 환경 설정을 사용합니다.
  2. 다음 번에 플래그를 확인하십시오. 앱이 전에 실행 된 적이 없다면 첫 단계로 이동하십시오. 파일을 찾고 재생하기 전에 실행했다면.

정말 필요한 단계이므로 사용할 수 없으므로 truezip vfs를 사용해보십시오. 그러나 전에 사용 해본 적이 없다는 점을 기억하십시오. 여기 도서관 : https://truezip.java.net/, https://github.com/jruesga/android_external_libtruezip

+1

FYKI, 우리는 파일을 압축 해제하지 않습니다. 그것은 zip 파일이며 zip 파일 내의 오디오 파일에 직접 액세스합니다. –

+0

@MahalakshmiSaravanan 나는 그것이 내 두뇌에 미끄러 져서 정말 유감이다. Zip 파일을 반복하는 데 잘못된 방법을 사용할 수 있기 때문일 수 있습니다. 이것은 도움이 될 수 있습니다 : [zip 파일 레코드를 반복하는 방법] (http://java-performance.info/how-to-iterate-zip-file-records/) –

+0

접근 방법을 따르면, 파일. 내 Zip 파일에 3 개의 폴더가 있는데 첫 번째 폴더의 파일은 시간 범위 내에서 액세스 할 수 있지만 두 번째 및 세 번째 폴더 파일은 파일을 검색하는 데 53 초 이상 걸립니다. 이 일에서 나를 도울 수 있니? –

관련 문제