Hallo,
ich habe mein Vigenere Verschlüsselungsprogramm nun endlich fertig und es funktioniert auch ganz gut. Nun soll ich aber in der Uni-Aufgabe eine 18 MB große Textdatei verschlüsseln. Ich bekomme beim Starten immer die java.lang.OutOfMemoryError: Java heap space
Nun habe ich das Programm mit einer kleineren Datei probiert und da funktioniert die Verschlüsselung einwandfrei.
Ich gehe folgendermaßen vor:
ich lese eine(!) zeile text ein, füge sie einem StringBuffer zu (lineBuffer), dann verschlüssele ich sie, dann schreib ich sie in eine neue Datei (output.txt).
Danach setze ich den lineBuffer wieder auf null und lese die nächste Zeile ein.. so ist es zumindest gedacht ;-)
Deshalb verstehe ich nicht, dass ich kleine Dateien einlesen kann, große jedoch nicht...
Hier ist mein Code:
ich habe mein Vigenere Verschlüsselungsprogramm nun endlich fertig und es funktioniert auch ganz gut. Nun soll ich aber in der Uni-Aufgabe eine 18 MB große Textdatei verschlüsseln. Ich bekomme beim Starten immer die java.lang.OutOfMemoryError: Java heap space
Nun habe ich das Programm mit einer kleineren Datei probiert und da funktioniert die Verschlüsselung einwandfrei.
Ich gehe folgendermaßen vor:
ich lese eine(!) zeile text ein, füge sie einem StringBuffer zu (lineBuffer), dann verschlüssele ich sie, dann schreib ich sie in eine neue Datei (output.txt).
Danach setze ich den lineBuffer wieder auf null und lese die nächste Zeile ein.. so ist es zumindest gedacht ;-)
Deshalb verstehe ich nicht, dass ich kleine Dateien einlesen kann, große jedoch nicht...
Hier ist mein Code:
Code:
public static void main (String[] args) throws IOException {
try {
String key = new StringBuffer().append("AI4 encrypts every+hing? Y3s: i7 d()3s!!").toString();
char[] codeArray = getCodes();
File output = new File("output.txt");
BufferedWriter out = new BufferedWriter (new FileWriter(output));
String text = "cleartext.big.txt";
String ch;
StringBuffer lineBuff = new StringBuffer();
try {
File input = new File(text);
BufferedReader r = new BufferedReader (new FileReader(text));
while ( (ch = r.readLine())!= null) {
lineBuff.append(ch);
for (int i = 0, j = 0; i < lineBuff.length(); i++, j++){
//i ist der Zähler für den Originaltext
//j ist der Zähler für das Schlüsselwort
if( j == key.length()) j = 0;
//wenn Schlüsselwort durchlaufen, wieder von vorne im Schlüssel
int var1 = findCodes(codeArray, lineBuff.charAt(i));
int var2 = findCodes(codeArray, key.charAt(j));
int ciph = (var1 + var2) % 26;
out.write(codeArray[ciph]);
}
out.newLine();
out.flush();
lineBuff.setLength(0);
}
out.close();
r.close();
}
catch (IOException e) {
System.out.println(e);
};
}
catch (IOException e) {
System.out.println(e);
};
}