2016-12-08 7 views
-3

Я создаю программу, которая будет способна шифровать и дешифровать текст. В настоящее время мои процессы шифрования и дешифрования происходят с CASE SWITCHES, чтобы избежать перекрытия/ошибки в шифровании. Мне кажется, что это должно работать. По сути, шифрование работает следующим образом: цикл FOR считывает каждый символ ввода String, а затем переключает его на CASE SWITCH, который должен быть заменен определенной строкой. Я получаю следующее сообщение об ошибке:Java Encryption: "java.lang.OutOfMemoryError: Java heap space"

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
    at java.util.Arrays.copyOf(Arrays.java:3332) 
    at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124) 
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:541) 
    at java.lang.StringBuffer.append(StringBuffer.java:350) 
    at java.util.regex.Matcher.appendReplacement(Matcher.java:888) 
    at java.util.regex.Matcher.replaceAll(Matcher.java:955) 
    at java.lang.String.replaceAll(String.java:2223) 
    at OR_v5_12_5_16.main(OR_v5_12_5_16.java:161) 

----jGRASP wedge2: exit code for process is 1. 
----jGRASP: operation complete. 

Вот немного модифицированная и укороченная версия кодового блока. Реальный блок кода проходит через все 26 символов верхнего регистра и все 26 строчных символов. Перед сообщением об ошибке программа, похоже, останавливается.

for (int i = 0; i < txt.length(); i++){ 

    String txt_char = String.valueOf(txt.charAt(i)); 

     switch (txt_char){ 

      case "A": 

       txt = txt.replaceFirst("A", "11110000"); 
       break; 
     } 
} 
+0

Отправьте свой код как [mcve], и ​​мы сможем помочь. Как бы то ни было, мы не можем оказать эффективную помощь. – AJNeufeld

+0

Скопируйте и вставьте код и журналы. Не используйте изображения в этих случаях. – sanastasiadis

+0

@AJNeufeld Он был предоставлен на данный момент – PeculiarTendencies

ответ

-1

Ваш код шифрования может быть гораздо более эффективным путем:

  • предварительного выделения памяти, необходимый для результата
  • не преобразования одиночных символов обратно в строки

Пример:

StringBuilder result = new StringBuilder(txt.length() * 8); 

int len = txt.length(); 
for (int i = 0; i < len; i++) { 
    char ch = txt.charAt(i); 

    switch (ch) { 
     case 'A': result.append("11110000"); break; 
     case 'B': result.append("10101010"); break; 
     // ... etc ... 
    } 
} 

txt = result.toString(); 

Не изменяя оригинал String во время шифрования, также исключается возможность повторного шифрования уже зашифрованных данных.

+0

Спасибо! Я обязательно попробую! Спасибо за помощь! – PeculiarTendencies

Смежные вопросы