Servus!
Folgendes: ich möchte einen Text, ca 300 seiten, ergo ca. 490000 zeichen kodieren, nur monogramme.
das alphabet wurde kodiert und steht bereit.
nun wollte ich die einzelnen zeichen im Text mittels String.replace mit deren kodierungen ersetzen.
das so:
wobei in code das kodierte ABC ind in codeTxt zuanfangs der orignatext steht.
überschlagen ergibt der fertig codierte text (textlänge * mittlereKodewortLänge(=4,758231988319831) =) 2333456 zeichen .. sind aber auch nur ca. 4.45 mb (bei 2byt/zeichen, string halt) .
das Problem: es dauert exponentiell länger .. is klar, weil der text exponentiell anwäxt, aber das ist verkraftbar
das wirkliche problem: trotz -Xmx256m bekomme ich bei ca. 80% nen outofmemoryerror: java heap size .. der speicher ist bei ca 40% noch bei 13mb, dann expo mehr .. wiso das???
wenn ich-Xmx512m mache, bleibt alles einfach irgendwann stehen
kann mir da jemand helfen und sagen, wiso String.replace so schnell speicher anhäuft?
gibt es eine schnelle alternative, meine (
) ist kotzlangsam, verständlich.
help!
mfg, eyeless
Folgendes: ich möchte einen Text, ca 300 seiten, ergo ca. 490000 zeichen kodieren, nur monogramme.
das alphabet wurde kodiert und steht bereit.
nun wollte ich die einzelnen zeichen im Text mittels String.replace mit deren kodierungen ersetzen.
das so:
Code:
for(int i=0;i<code.length;i++) {
key = ((ArrayList<Entry<String,Double>>) list.get(1)).get(i).getKey();
codeTxt = codeTxt.replace(((CharSequence) key).toString(),code[i]);
}
überschlagen ergibt der fertig codierte text (textlänge * mittlereKodewortLänge(=4,758231988319831) =) 2333456 zeichen .. sind aber auch nur ca. 4.45 mb (bei 2byt/zeichen, string halt) .
das Problem: es dauert exponentiell länger .. is klar, weil der text exponentiell anwäxt, aber das ist verkraftbar
das wirkliche problem: trotz -Xmx256m bekomme ich bei ca. 80% nen outofmemoryerror: java heap size .. der speicher ist bei ca 40% noch bei 13mb, dann expo mehr .. wiso das???
wenn ich-Xmx512m mache, bleibt alles einfach irgendwann stehen
kann mir da jemand helfen und sagen, wiso String.replace so schnell speicher anhäuft?
gibt es eine schnelle alternative, meine (
Code:
StringBuffer sb=new StringBuffer(origTxt);
oi=0;
while(sb.indexOf(key,oi) > -1) {
sb = sb.replace(sb.indexOf(key,oi),sb.indexOf(key,oi)+key.length(),code[i]);
oi = oi + code[i].length();
}
help!
mfg, eyeless