LZW алгоритм - Java
Формулировка задачи:
Сделал сжатие текста на основе LZW. Считывание происходит с txt файла, запись List<Integer> объекта в другой txt. Но размеры второго выходят в разы больше. Кто поможет разобраться? Все ли правильно в самом алгоритме? и нужно ли производить запись в файл, как у меня? Проект ниже. Буду очень благодарен
Решение задачи: «LZW алгоритм»
textual
Листинг программы
import javax.swing.*; import java.awt.*; import java.io.*; import java.util.*; import java.util.List; public class LZW { public static File file; public static String fileName; public static String filePath; public final static char[] alphaRUS={ 'а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я', 'А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я'}; public static void compress() throws IOException { String uncompressed; String uncompressed1; JFileChooser fileopen = new JFileChooser(System.getProperty("user.dir")); int ret = fileopen.showDialog(null, "Открыть файл"); if (ret == JFileChooser.APPROVE_OPTION) { file = fileopen.getSelectedFile(); } fileName=file.getName(); filePath=file.getAbsolutePath(); BufferedReader reader = new BufferedReader(new InputStreamReader( new FileInputStream(file), "UTF-8")); StringBuilder text = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { text.append(line); } reader.close(); uncompressed1 = text.toString(); uncompressed=uncompressed1.substring(1,uncompressed1.length()); int dictSize = 322; Map<String,Integer> dictionary = new HashMap<String,Integer>(); for (int i = 0; i < 256; i++) dictionary.put("" + (char)i, i); int j=256; for (char c:alphaRUS) { dictionary.put("" + c, j); j++;} String w = ""; List<Integer> result = new ArrayList<Integer>(); for (char c : uncompressed.toCharArray()) { String wc = w + c; if (dictionary.containsKey(wc)) { w = wc; else { result.add(dictionary.get(w)); dictionary.put(wc, dictSize++); w = "" + c; } } if (!w.equals("")) result.add(dictionary.get(w)); FileOutputStream out = new FileOutputStream("compressed.txt"); ObjectOutputStream oout = new ObjectOutputStream(out); oout.writeObject (result); oout.close(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д