2012-04-01 5 views
-1

Hier ist the thread, dass ich über das Erstellen eines Ressourcenstapels aus AssetManager in Android lesen.Wie erstellt man einen Ressourcenstapel in Android aus den Asset- und/oder Res-Ordnern?

Was bedeutet es, "einen Ressourcenstapel von AssetManager zu erstellen?" Muss ich verwenden:

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

Oder etwas? Wenn jemand Hinweise geben kann, schätze ich es. Wenn die Frage nicht spezifisch genug ist, poste bitte in den Kommentaren darüber, und ich werde die Frage verbessern. Danke im Voraus.

Antwort

2

Ein Stapel ist nur eine Sammlung von Gegenständen, das gleiche wie ein Array, Arraylist, Sammlung, usw.

Der Vorteil eines Stapel ist, dass man einfach push(Object o) Objekte in die Stapeln sie hinzufügen die Sammlung und pop() Objekte aus dem Stapel, wenn Sie sie zurückbekommen wollen. Ein Stack kann zu jeder Größe wachsen.

Sie wahrscheinlich so etwas wie dies tun müsste ...

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 hat eine open() Methode für das Vermögen zu lesen - Sie werden wahrscheinlich jedes Asset in den Speicher lesen müssen (wie ein Array oder byte[] eine tatsächliche Object) und dann jedes Objekt in den Stapel schieben.

für weitere Informationen siehe http://developer.android.com/reference/android/content/res/AssetManager.html

+0

Wenn ich eine Datei von Inputstream in ein Array von Bytes zu laden, bedeutet das auch die Größe der geladenen Datei ist die Größe des Byte-Arrays mal 8? –

+0

Nein, ich glaube, Sie mischen sich mit Bits und Bytes. Das Array 'byte [] 'hätte die gleiche Größe wie die Originaldatei (da Dateien normalerweise in Bytes gemessen werden), es sei denn, die Datei wird aus irgendeinem Grund komprimiert (ziemlich viele Assets werden nicht einzeln komprimiert). Sie können die Methode 'openFd (String)' auf 'AssetManager' verwenden, um einen' AssetFileDescriptor' zu erhalten, den Sie dann 'getLength()' aufrufen können, um die Größe der Datei zu ermitteln. – wattostudios

+0

Ah! Vielen Dank! Außerdem möchte ich Ihnen danken, dass Sie mir hilfreiche Hinweise gegeben haben. Ich wusste bis jetzt nie, wie ich die Gesamtgröße der Datei ermitteln kann. AssetFileDescriptor.getLength() passt wirklich zu meinen Bedürfnissen. –

Verwandte Themen