android-studio - 如何播放分成两个文件夹的 100k 音频文件集合中的单个音频文件?

标签 android-studio fileinputstream zip fileoutputstream zipinputstream

我已将两个媒体文件夹放入一个 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();

最佳答案

尽量不要重新解压该文件,因为它会消耗太多时间。 您可以按照以下步骤操作,而不是重新解压缩文件:

  1. 首次启动应用程序时解压缩文件。设置我们之前启动过该应用程序的标志,使用首选项。
  2. 下次启动时,检查该标志。如果应用程序以前从未启动过,请转到第一步。如果之前已启动,请找到该文件并播放。

如果您确实无法使用这些步骤,因为这是您的要求,您可以尝试使用 truezip vfs。但请注意,我以前从未使用过它。 这里是图书馆: https://truezip.java.net/ , https://github.com/jruesga/android_external_libtruezip

关于android-studio - 如何播放分成两个文件夹的 100k 音频文件集合中的单个音频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37936307/

相关文章:

android - 在 Android studio 中创建一个独立的库模块

java - 使用 TCP/IP 拦截 http 文件上传

java - 在java中读取日志文件

java - 当我从 Android Studio 在 Android 手机上运行应用程序时,它显示空白屏幕

安卓工作室 : Background task running indefinitely

android - 将项目导入Android Studio

java - FileInputStream.read 如何更改我的字节数组?

go - 创建没有标题的 zip 文件

ruby-on-rails - 如何解压缩包含 Rails 中的文件夹和文件的 zip 文件,同时保持目录结构

php - 在 PHP 中从文件流创建 Zip