Hi,
also ich hab ein Performance Problem. Ich muss eine 30MB große Datei einlesen, verarbeiten und wieder schreiben. Das einlesen klappt inzwischen ganz gut, nur leider dauern die Stringoperationen sehr sehr lange. Was könnte ich noch tun um die Performance weiter zu verbessern? Bis jetzt hab ich immer spätestens nach 4h
abgebrochen.
also ich hab ein Performance Problem. Ich muss eine 30MB große Datei einlesen, verarbeiten und wieder schreiben. Das einlesen klappt inzwischen ganz gut, nur leider dauern die Stringoperationen sehr sehr lange. Was könnte ich noch tun um die Performance weiter zu verbessern? Bis jetzt hab ich immer spätestens nach 4h
Java:
import java.io.*;
import java.net.*;
public class Test {
FileWriter fw;
BufferedWriter bw;
File outFile;
String myBuffer="";
public static void main(String[] args) {
Test t = new Test();
t.read();
}
public final void read() {
try {
System.out.println("Reading file...");
BufferedReader in = new BufferedReader(new FileReader("text.txt"));
String line;
StringBuffer buffer = new StringBuffer();
while ((line = in.readLine()) != null) {
buffer.append(line);
}
line = null;
in = null;
String buf = addBreak(encUrl(buffer.toString()));
write(decURL(buf));
}
catch (Exception e) {
System.err.println("error:"+e);
}
}
public final String encUrl(String s) {
try {
String oldtest = URLEncoder.encode(s, "ASCII");
String newTest = oldtest.replace("%3F","");
newTest = newTest.replace("%00",""); //Null entfernen
newTest = newTest.replace("%0D%0A",""); //Umbruch entfernen
myBuffer = myBuffer + newTest;
oldtest = null;
newTest = null;
return myBuffer;
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
}
public final String decURL(String test){
System.out.println("Decoding...");
String test2 = "";
try {
test2 = URLDecoder.decode(test);
return test2;
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
return test2;
}
public final void write(String s) {
System.out.println("writing!");
try {
outFile = new File("my_replaced_test.txt");
fw = new FileWriter(outFile);
bw = new BufferedWriter(fw);
bw.write(s);
bw.close();
}
catch (Exception e) {
System.err.println("Writing Error:"+e);
}
}
public String addBreak(String s) {
System.out.println("Breaking...");
int index = 0;
String startString = "";
String endString = "";
startString = s;
String midString = "";
for(int i=1;i<s.length();i++) {
index = startString.indexOf("%7C", index+3);
if(index == -1 ) {
return startString;
}
if(i%11==0) {
endString = startString.substring(index+3);
midString = startString.substring(index,index+3);
startString = startString.substring(0,index);
midString = midString.replaceFirst("%7C", "%7C%0D%0A");
startString = startString + midString + endString;
}
}
startString = null;
endString = null;
midString = null;
return startString;
}
}