【问题标题】:How to create a stack of resources in Android from the asset and/or res folders?如何从资产和/或 res 文件夹在 Android 中创建一堆资源?
【发布时间】:2012-04-01 06:18:25
【问题描述】:

这是我读到的the thread,它是关于在 Android 中从 AssetManager 制作一堆资源的。

“从 AssetManager 创建资源堆栈”是什么意思?我必须使用:

Stack stack = new Stack();
stack.push(this.getAssets());

还是什么?如果有人可以提供提示,我将不胜感激。如果问题不够具体,请在 cmets 中发布,我会改进问题。提前致谢。

【问题讨论】:

    标签: java android resources stack assets


    【解决方案1】:

    Stack只是Objects的集合,和数组、ArrayList、Collection等一样

    使用堆栈的好处是,您可以简单地将 push(Object o) 对象添加到堆栈中以将它们添加到集合中,然后将 pop() 对象从堆栈中取出,然后再将它们取回。 Stack 可以增长到任意大小。

    你可能需要做这样的事情......

    Stack stack = new Stack();
    AssetManager assets = this.getAssets();
    String[] assetLocations = assets.list();
    
    for (int i=0;i<assetLocations.length;i++){
        byte[] asset = loadAssetFromStream(assetLocations[i]); // you need to write this
        stack.push(asset);
    }
    

    AssetManager 有一个 open() 方法用于读取资产 - 您可能需要将每个资产读入内存(如 byte[] 数组或实际的 Object),然后将每个对象推入堆栈。

    更多信息请参考http://developer.android.com/reference/android/content/res/AssetManager.html

    【讨论】:

    • 如果我从 InputStream 加载一个文件到一个字节数组中,这是否也意味着加载文件的大小是字节数组大小乘以 8?
    • 不,我认为您混淆了位和字节。 byte[] 数组将与原始文件大小相同(因为文件通常以字节为单位),除非由于某种原因文件被压缩(几乎某些资产没有单独压缩)。您可以在AssetManager 上使用openFd(String) 方法来获取AssetFileDescriptor,然后您可以调用getLength() 来获取文件的大小。
    • 啊!谢谢!除此之外,我还要感谢您给我更多有用的提示。直到现在我才知道如何获得文件的总大小。 AssetFileDescriptor.getLength() 非常适合我的需求。
    猜你喜欢
    • 2013-06-01
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多