LZW алгоритм - Java

Узнай цену своей работы

Формулировка задачи:

Сделал сжатие текста на основе LZW. Считывание происходит с txt файла, запись List<Integer> объекта в другой txt. Но размеры второго выходят в разы больше. Кто поможет разобраться? Все ли правильно в самом алгоритме? и нужно ли производить запись в файл, как у меня? Проект ниже. Буду очень благодарен

Решение задачи: «LZW алгоритм»

textual
Листинг программы
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.io.*;
  4. import java.util.*;
  5. import java.util.List;
  6.  
  7. public class LZW {
  8.     public static File file;
  9.     public static String fileName;
  10.     public static String filePath;
  11.     public final static char[] alphaRUS={ 'а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я',
  12.             'А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я'};
  13.     public static void compress() throws IOException {
  14.         String uncompressed;
  15.         String uncompressed1;
  16.         JFileChooser fileopen = new JFileChooser(System.getProperty("user.dir"));
  17.  
  18.         int ret = fileopen.showDialog(null, "Открыть файл");
  19.         if (ret == JFileChooser.APPROVE_OPTION) {
  20.             file = fileopen.getSelectedFile();
  21.         }
  22.  
  23.         fileName=file.getName();
  24.         filePath=file.getAbsolutePath();
  25.  
  26.         BufferedReader reader = new BufferedReader(new InputStreamReader(
  27.                 new FileInputStream(file), "UTF-8"));
  28.         StringBuilder text = new StringBuilder();
  29.         String line = null;
  30.         while ((line = reader.readLine()) != null) {
  31.             text.append(line);
  32.         }
  33.         reader.close();
  34.         uncompressed1 = text.toString();
  35.         uncompressed=uncompressed1.substring(1,uncompressed1.length());
  36.        
  37.  
  38.         int dictSize = 322;
  39.  
  40.         Map<String,Integer> dictionary = new HashMap<String,Integer>();
  41.         for (int i = 0; i < 256; i++)
  42.             dictionary.put("" + (char)i, i);
  43.  
  44.         int j=256;
  45.         for (char c:alphaRUS)  {
  46.             dictionary.put("" + c, j);
  47.             j++;}
  48.  
  49.         String w = "";
  50.         List<Integer> result = new ArrayList<Integer>();
  51.         for (char c : uncompressed.toCharArray()) {
  52.             String wc = w + c;
  53.             if (dictionary.containsKey(wc))
  54.             {  w = wc;
  55.             else {
  56.                 result.add(dictionary.get(w));
  57.                 dictionary.put(wc, dictSize++);
  58.                 w = "" + c;
  59.             }
  60.         }
  61.  
  62.         if (!w.equals(""))
  63.             result.add(dictionary.get(w));
  64.  
  65.  
  66.  
  67.         FileOutputStream out = new FileOutputStream("compressed.txt");
  68.         ObjectOutputStream oout = new ObjectOutputStream(out);
  69.  
  70.  
  71.         oout.writeObject (result);
  72.         oout.close();
  73.     }
  74.  
  75.  
  76. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут