Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中从asset和/或res文件夹创建资源堆栈?_Java_Android_Resources_Stack_Assets - Fatal编程技术网

Java 如何在Android中从asset和/或res文件夹创建资源堆栈?

Java 如何在Android中从asset和/或res文件夹创建资源堆栈?,java,android,resources,stack,assets,Java,Android,Resources,Stack,Assets,下面是我读到的关于在Android中使用AssetManager制作资源堆栈的内容 从AssetManager创建资源堆栈意味着什么?我是否必须使用: Stack stack = new Stack(); stack.push(this.getAssets()); 还是什么?如果有人能给我一些提示,我将不胜感激。如果问题不够具体,请发表评论,我会改进这个问题。提前感谢。堆栈只是对象的集合,与数组、ArrayList、集合等相同 使用堆栈的好处是,您可以简单地将对象推送到堆栈中,以将它们添加到集

下面是我读到的关于在Android中使用AssetManager制作资源堆栈的内容

从AssetManager创建资源堆栈意味着什么?我是否必须使用:

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

还是什么?如果有人能给我一些提示,我将不胜感激。如果问题不够具体,请发表评论,我会改进这个问题。提前感谢。

堆栈只是对象的集合,与数组、ArrayList、集合等相同

使用堆栈的好处是,您可以简单地将对象推送到堆栈中,以将它们添加到集合中,并在想要取回对象时从堆栈中弹出对象。堆栈可以增长到任何大小

你可能需要这样做

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有一个用于读取资产的开放方法—您可能需要将每个资产读入内存,如字节[]数组或实际对象,然后将每个对象推入堆栈


有关更多信息,请参阅

如果我将文件从InputStream加载到字节数组中,这是否也意味着加载文件的大小是字节数组的大小乘以8?不,我认为您混淆了位和字节。byte[]数组的大小与原始文件的大小相同,因为文件通常是以字节为单位度量的,除非出于某种原因压缩了文件,否则某些资产不会单独压缩。您可以在AssetManager上使用openFdString方法来获取AssetFileDescriptor,然后可以调用getLength来获取文件的大小。啊!非常感谢。除此之外,我还要感谢你给了我更多有用的提示。直到现在我才知道如何获取文件的总大小。AssetFileDescriptor.getLength非常适合我的需要。