Android studio 如何从分为两个文件夹的100k音频文件集合中播放单个音频文件?

Android studio 如何从分为两个文件夹的100k音频文件集合中播放单个音频文件?,android-studio,fileinputstream,zipfile,fileoutputstream,zipinputstream,Android Studio,Fileinputstream,Zipfile,Fileoutputstream,Zipinputstream,我将两个媒体文件夹放在一个zip文件夹中,zip文件夹中的媒体文件总数为100k。我需要从zip文件夹的特定文件夹播放单个文件。问题是,首先完全读取Zip文件夹的全部内容,然后访问必要的文件。因此,播放一个文件需要55秒以上。我需要一个解决方案来减少播放音频文件的时间 下面是我的代码: long lStartTime = System.currentTimeMillis(); System.out.println("Time started");

我将两个媒体文件夹放在一个zip文件夹中,zip文件夹中的媒体文件总数为100k。我需要从zip文件夹的特定文件夹播放单个文件。问题是,首先完全读取Zip文件夹的全部内容,然后访问必要的文件。因此,播放一个文件需要55秒以上。我需要一个解决方案来减少播放音频文件的时间

下面是我的代码:

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();

尽量不要重新解压缩文件,因为它会占用太多时间。 您可以执行以下步骤,而不是重新解压缩文件:

  • 第一次启动应用程序时解压缩文件。设置我们之前启动应用程序的标志,使用首选项
  • 在下一次发射时,检查标志。如果应用程序以前从未启动过,请转到第一步。如果之前启动过,请查找文件并播放
  • 如果您确实不能使用这些步骤,因为这是您的需求,您可以尝试使用truezip vfs。但请注意,我以前从未使用过它。 这里是图书馆:

    FYKI,我们没有解压缩文件。这是一个zip文件,我们可以直接访问zip文件中的音频文件。@MahalakshmiSaravanan我真的很抱歉它在我脑子里溜走了。。这可能是因为您使用了错误的方法来迭代zip文件。这可能会有所帮助:按照您的方法检索文件需要时间。我的Zip文件中有3个文件夹,第一个文件夹中的文件可以在一段时间内访问,但是第二个和第三个文件夹中的文件需要53秒以上才能检索到该文件。你能帮我吗?试着用BufferedOutputStream代替逐字节复制。将(int c=zis.read();c!=-1;c=zis.read()){fos.write(c);}更改为如下内容:BufferedOutputStream bufout=new BufferedOutputStream(fout);字节[]缓冲区=新字节[1024];int read=0;while((read=zipStream.read(buffer))!=-1{bufout.write(buffer,0,read);}zipStream.closeEntry();bufout.close();