Arraylist<Byte> zu einem String konvertieren

  • Antworten:4
ilyas i.
  • Forum-Beiträge: 61

08.11.2011, 11:50:22 via Website

Hallo , ich suche eine performante Lösung um einen Arraylist<Byte> zu einem String zu konvertieren. In diesem Arralist befindet sich die UTF-8 Kodierung einer Zeichenkette.


Eine performante Lösung daher, da ich viel Datenverkehr habe, sodass ein Galaxy S2 auf bis zu 90 % ausgelastet wird (wegen meiner vorherigen konvertierung in eine Zeichenkette)

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

08.11.2011, 12:26:57 via Website

1byte[] byteArray = arrayList.toArray(new byte[arrayList.size()]);
2String string = new String(byteArray , "UTF-8");

Wobei ich mich frage warum du eine ArrayList nimmst, um einzelne Bytes (mit großem B, also den Wrapper-Typ) zu speichern.
Normal nimmt man für sowas einen byte[] vom primitiven byte Typ.

Wie sieht denn deine ganze Logik für den Datenverkehr aus?
Ich tippe mal du liest Zeichenweise bytes aus und verwendest keinen Buffer?
Eine solche Auslastung klingt für mich zumindest danach.

— geändert am 08.11.2011, 12:28:22

Antworten
ilyas i.
  • Forum-Beiträge: 61

08.11.2011, 13:36:14 via Website

Rafael K.
1byte[] byteArray = arrayList.toArray(new byte[arrayList.size()]);
2String string = new String(byteArray , "UTF-8");

Wobei ich mich frage warum du eine ArrayList nimmst, um einzelne Bytes (mit großem B, also den Wrapper-Typ) zu speichern.
Normal nimmt man für sowas einen byte[] vom primitiven byte Typ.

Wie sieht denn deine ganze Logik für den Datenverkehr aus?
Ich tippe mal du liest Zeichenweise bytes aus und verwendest keinen Buffer?
Eine solche Auslastung klingt für mich zumindest danach.

Ich bekomme einzelne Bytes vom InputStream und speichere diese in ein ArrayList um. Das ist daher, da ich diesen Datenpaket von Klasse zu Klasse weitergebe und jedesmal Daten aus dem Paket entnehme.. get() und remove(). Sonst müsste ich die Daten immer wieder umkopieren in ein neues, nachdem sich die Klasse seine Daten entnimmt.
Das:
byte[] byteArray = arrayList.toArray(new byte[arrayList.size()]);
String string = new String(byteArray , "UTF-8");

habe ich schon probiert gehabt. byte[] byteArray = arrayList.toArray(new byte[arrayList.size()]);
ist nicht erlaubt
sondern:
Byte[] byteArray = extras.toArray(new Byte[end-start]);
dann wiederum klappt das: String string = new String(byteArray , "UTF-8");
nicht.

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

08.11.2011, 13:48:44 via Website

ilyas i.
Ich bekomme einzelne Bytes vom InputStream und speichere diese in ein ArrayList um.
Die Performance Probleme werden wohl eher daher kommen.
Solche Streams liest man mit einem byte[] als Puffer, einzelne bytes zu lesen ist tausendfach langsamer.

Antworten
ilyas i.
  • Forum-Beiträge: 61

08.11.2011, 14:23:49 via Website

Ich habe es nun hinbekommen die Performance zu sparen.

Nun bin ich in etwa auf 15-25% Auslastung.


Diese Auslastung kommt nun daher , dass ich mein TextView erweitere mit :

textview.append( arraylist.toString())

kann man da an performance sparen? in dem man in etwa die Draw-Qualität senkt? Animation oder sowas ausschaltet?

Antworten