Windows phone 8 如何在wp8中组织40000多个mp3文件?

Windows phone 8 如何在wp8中组织40000多个mp3文件?,windows-phone-8,Windows Phone 8,我想在我的wp8应用程序中放置大约45000个mp3文件, 都是音效,小于5k字节, 但是,总空间超过150m字节 我认为有两种方法来储存它们 将每个mp3存储为一个单独的文件,它在逻辑上需要150米以上的空间,实际上需要220米以上的空间 使用二进制文件将所有文件保存在一个文件中,可能类似于以下结构: first 4bytes : --length of mp3 file name; first byte[]: --store the mp3 file name; senc 4

我想在我的wp8应用程序中放置大约45000个mp3文件, 都是音效,小于5k字节, 但是,总空间超过150m字节

我认为有两种方法来储存它们

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

    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;
    
  • 然后重复此操作,将它们全部附加到一个文件中

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


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

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

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


    文件系统中的额外空间可能得到了很好的利用。

    我将第二个选项与索引一起使用,并使用。您可以在文件中查找
    位置
    ()(如下所示):

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

    正在下载

    你可能也想考虑把这个巨大的文件分解成一些更小的文件以获得更好的下载体验。您可以在手机上提供一个组或单个文件的内容时将其附加到庞大的文件中

    谢谢老兄,实际上我现在用的是第一种方式,它很方便,不需要额外的代码来处理。但是从原始的大文件中提取出来需要大约5分钟(我不能将每个mp3文件都添加到资产文件夹中,我只是用应用程序下载包含所有mp3文件的大文件)。我担心的是用户可能会感到不耐烦..电话上有:。我还为如何处理下载体验添加了建议。
    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);        
    }