如何在wp8中组织超过40000个mp3文件?

时间:2014-01-24 12:05:22

标签: windows-phone-8

我想在我的wp8应用中放置大约45000个mp3文件,     所有这些都是声音效果,不到5k字节,     但是总空间超过150m字节。

我认为有两种方法可以存储它们。

  1. 将每个mp3存储为单独的文件,逻辑上需要超过150米的空间,实际上超过220米
  2. 使用二进制文件将所有文件保存在一个文件中,可能类似于以下结构:

    first 4bytes :    --length of mp3 file name;
    first byte[]:     --store the mp3 file name;
    senc  4bytes:     --length of mp3 file;
    senc  byte[]:     --store the real content of mp3;
    
  3. 并重复此操作,将所有这些内容附加到一个文件中。

    它只需要150米,但我必须寻找每个mp3文件的位置。

    您认为哪一个更好?我更喜欢第二种解决方案。但是我没有发现任何api可以从偏移0寻找到偏移150 * 1024 * 1024,这可能会引发性能问题。

2 个答案:

答案 0 :(得分:1)

我将第二个选项与索引和BinaryReader一起使用。您可以在文件中寻找positionreference)(如下所示):

byte[] mp3File;
// Get the file.
var file = await dataFolder.OpenStreamForReadAsync("combined_mp3s.bin");

using (var binReader = new BinaryReader(file))
{
    binReader.Postion = offset; // using your math ...
    var fileName = binReader.ReadString(); (length prefixed string read)
    // or you could read the size on your own and read the characters
    var mp3FileLen = binReader.ReadInt32();
    mp3File = binReader.ReaderBytes(mp3FileLen);        
}

我建议您使用单独存储的每个文件的文件名和数据起始位置的哈希/字典,以便您的应用程序可以快速找到文件的内容而无需进行扫描。

下载

您可能还需要考虑将大文件分解为一些较小的文件,以获得更好的下载体验。您可以附加到大文件,因为手机上可以使用组或单个文件的内容。

答案 1 :(得分:0)

您的第二种选择的问题是,通过避免使用文件系统,您将失去文件系统为您提供的大量便利。

也许最重要的是,您现在(使用您建议的数据结构)不再检索具有特定名称的文件,而无需扫描(可能)整个文件。

文件系统中的额外空间可能已被充分利用。