Devilmarkus Geschrieben 22. April 2009 Geschrieben 22. April 2009 Hallo zusammen, wie kann ich mit JAVA ein Byte Array aufbauen, wenn ich vorher die Länge noch nicht kenne? byte[] tapesample; ist klar... Nur wie kann ich es nun schrittweise erhöhen? Ich möchte eine Datei erzeugen, wo die Länge noch unbekannt ist. [Prozedur:] tapesample = kalkulierter Wert i++; JAVA sagt mir hier aber, dass das so nicht geht. Was kann ich hier machen? Zitieren
kingofbrain Geschrieben 22. April 2009 Geschrieben 22. April 2009 Ein Byte-Array ist unveränderlich in der Größe, Du musst also ein neues Array initialisieren und die Einträge umkopieren. Verwende doch eine Liste, dann kannst Du problemlos Daten hinzufügen. Und mit der Methode toArray erhältst Du am Ende auch noch ein Array, wenn Du es in dieser Darstellung brauchst. Peter Zitieren
Devilmarkus Geschrieben 22. April 2009 Autor Geschrieben 22. April 2009 Verwende doch eine Liste, dann kannst Du problemlos Daten hinzufügen. Und mit der Methode toArray erhältst Du am Ende auch noch ein Array, wenn Du es in dieser Darstellung brauchst. Wie sähe das denn aus? Habe noch nie mit Listen gearbeitet... Kleines Beispiel wäre cool. Danke schonmal. Zitieren
Devilmarkus Geschrieben 22. April 2009 Autor Geschrieben 22. April 2009 public Object[] list() { Vector vector = new Vector(); while(ivBlockPos < ivCdtFile.length) { gotoNextBlock(); vector.addElement("ID: " + Array.b2x(new byte[] { (byte)ivBlockType }) + ", pos: " + ivBlockPos + ", len: " + ivBlockLen); } return vector.toArray(); } Wäre dieses so eine Liste? Zitieren
speedi Geschrieben 22. April 2009 Geschrieben 22. April 2009 Das wäre sicherlich eine Variante. Außerdem gibt es auch noch LinkedList und ArrayList. Eine ArrayList hält die Daten - wie der Name schon sagt - in einem Array. Das heißt die ist ganz nett wenn du häufig auf verschiedene Einträge zugreifen musst. Aber wenn du ein Element in der ArrayList entfernen magst passiert im Hintergrund natürlich eine ganze Menge (aufrücken der nachfolgenden Elemente evtl. größe des Arrays verkleinern....). Genau das gleiche ist beim einfügen der Fall. Nachfolgende Elemente müssen verschoben werden und das Array ggf. vergrößert werden. Eine LinkedList hält die Daten hingegen in verketteten Objekten. Dadurch wird beim einfügen/entfernen jeweils nur eine Referenz verändert. Das ist natürlich von der Performance her unendlich viel besser wie bei der ArrayList. Aber wenn du auf ein bestimmtes Element zugreifen willst wird es hier leicht problematisch, denn die Liste muss dann mit einem counter durchgegangen werden. Wie ein Vector funktioniert weiß ich jetzt spontan leider nicht, aber du siehst schon: es kommt immer drauf an, was man mit den Listen machen will. Da sowohl Vector, ArrayList als auch LinkedList Implementationen von List sind ist der Zugriff immer der gleiche (wobei die jeweiligen Listen natürlich auch ein paar spezifische Methoden mitbringen, die man nutzen kann). Zitieren
Sturm Geschrieben 22. April 2009 Geschrieben 22. April 2009 Ja, Vector könnte man verwenden. An deiner Stelle würde ich allerdings die Arraylist verwenden... Javakurs2007/ArrayList - FreitagsrundenWiki Referenz: java.util.ArrayList Anbei noch ein Thread zu den Unterschieden: http://forum.fachinformatiker.de/java/85828-unterschied-zwischen-arraylist-vector.html Zitieren
Devilmarkus Geschrieben 22. April 2009 Autor Geschrieben 22. April 2009 Vielen Dank nochmal. Ich habe es also hinbekommen. Nun eine Frage: Damit mein Programm vernünftig läuft, habe ich diesen Parameter gesetzt: -Xms512m -Xmx768m -XX:MaxPermSize=256m Wie kann ich den Parameter auch in HTML-Code setzen, wenn ich das Ganze als Applet laufen lasse? Das Programm selber ist self-signed, allerdings müsste ich auch im Applet den Heap-Space erweitern. Ist das möglich? Zitieren
VaNaTiC Geschrieben 23. April 2009 Geschrieben 23. April 2009 JRE-Parameter: Da ein Applet vom Browser zum User geladen wird und dort durch die installierte JRE aufgerufen wird, kann man meines Wissen keinen Einfluss auf die Speichergröße nehmen. Hinweis am Rande: Wenn sehr viele Elemente eingefügt und wieder gelöscht werden sollen und das nicht nur am Angang und am Ende, dann gibt es nur eine performante Technik und das ist mittels LinkedList. Bei allen anderen müssen Abstriche gemacht werden. Eine oft verwendete Alternative zum ständigen Vergrößern einer ArrayList oder Vector ist, bereits beim Instanziieren die Elementanzahl zu übergeben. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.