2
我已经将两个媒体文件夹放入一个zip文件夹中,总共有100k个媒体文件在zip文件夹中。我需要从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();
FYKI,我们不解压缩文件。它是一个zip文件,我们直接访问zip文件中的音频文件。 –
@MahalakshmiSaravanan我真的很抱歉它滑落在我的大脑中。 这可能是因为您使用错误的方式来迭代zip文件。 这可能是一个帮助:[如何迭代zip文件记录](http://java-performance.info/how-to-iterate-zip-file-records/) –
按照你的方法,它需要时间来检索文件。我在我的Zip文件中有3个文件夹,可以在一段时间内访问第一个文件夹中的文件,但第二个和第三个文件夹文件的检索时间超过53秒。你能帮我吗? –