2013-11-22 2 views
0

Я пытаюсь реализовать технологию сжатия и декомпрессии LZW. Моя программа принимает любой файл в качестве InputStream и считывает его в массив байтов. Затем он применяет к нему алгоритм сжатия, а закодированные байты возвращаются в строковой переменной.Копирование содержимого строки в массив байтов (метод кодирования LZW)

Затем я применяю алгоритм декомпрессии, который возвращает исходные номера.

Теперь, чтобы получить исходный файл, мне нужно передать содержимое этой строки в массив байтов, а затем записать этот массив в выходной поток.

Копирование содержимого распакованной строки в массив байтов - вот где моя проблема.

File file = new File("aaaa.png"); 
byte[] data = new byte[(int) file.length()]; 
try{ 
    FileInputStream in = new FileInputStream(file); 
    in.read(data); 
    in.close(); 
for(int i= 0; i< data.length;i++){ 
     System.out.print("original = " + data[i]); 
    } 
String ax = Arrays.toString(data); 
List<Integer> compressed = compress(ax); 
System.out.println("compressed = " + compressed); 
String decompressed= new String(decompress(compressed)); 
System.out.println("decompressed = " + decompressed); 



// Copy string contents into byte array arr[] 



File file2 = new file("aaaa.png"); 
FileOutputStream out = new FileOutputStream(file2); 
out.write(arr); 
out.close(); 
} 
catch(Exception e){ 
    System.out.println("Error!"); 
    e.printStackTrace(); 
} 

Выходной сигнал для моего кода до сих пор выглядит ссылка это -

= -119807871131026100001373726882000170001686000 оригинальная .....

сжат = [91, 45, 49, 49, 57, 44 , 32, 56, 48, 261, 55, 56, 265, 49, 261, 49, 51, 270, 264, 32, 50, 54, 273, 261, 274, 280, 270, 272, 32, 55, 283 , 55, 50, 261, 54, 267, 262, .....]

распакованный = [-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13 , 73, 72, 68, 82, 0, 0, 0, 17, 0, 0, 0, 16, 8, 6, 0, 0, 0, -16, 49, -108, 95, 0, 0, 1, 115, 82, 71, 66, 0, -82, -50, 28, -23, 0, 0, 0 , 4, 103, 65, 77, 65, 0, 0, -79, -113, 11, -4, 97, 5, 0, 0, 0, 32, 99, 72, ...]

Пожалуйста, помогите мне выяснить, как скопировать содержимое строки в массив байтов. Спасибо!

ответ

1
  1. Строка байт [], и наоборот может быть преобразована следующим образом:

    String string = "Hello!"; 
    byte[] array; 
    //String to byte[] 
    array = string.getBytes(); 
    //byte[] to String 
    string = new String(array); 
    
  2. Если я понял, вы правы вы собираетесь разобрать строку байт числовых значений.

    String decompressed = "[-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72]"; 
    String[] input = decompressed.replaceAll("[\\[\\]]", "").split(", "); 
    byte[] output = new byte[input.length]; 
    for (int i = 0; i < input.length; i++) { 
        output[i] = Byte.parseByte(input[i]); 
    } 
    System.out.println(new String(output)); 
    

    Выход PNG и некоторые непечатаемые символы.

+0

Я пробовал это. Но, как и при использовании .getBytes(), он возвращает закодированные байты конкретной строки. Моя проблема в том, что у меня уже есть эти закодированные байты, сохраненные в строке «распакованные». Я пытаюсь преобразовать эти байтовые значения в строку. Как вы думаете, логика, которую я пытаюсь реализовать, возможна? – Pramit

+0

Я не понял. Строка 'распакованная' содержит байтовые значения, которые нужно скопировать в массив байтов? Если у вас есть массив с байтами, почему бы вам просто не называть 'new String (array)'? –

+0

Ты меня понял. В распакованной строке содержатся значения байтов, которые мне нужно скопировать в массив байтов. Я не могу использовать новый String (массив), потому что в более поздней части программы, когда я пытаюсь восстановить файл, я могу использовать out.write (arg), где arg может быть либо байтовым массивом, либо int. – Pramit

0

Спасибо миллиону @Sergey Fedorov. Вторая часть вашего ответа сработала для меня.

String[] input = decompressed.replaceAll("[\\[\\]]", "").split(", "); 
byte[] output = new byte[decompressed.length()]; 
for (int i = 0; i < input.length; i++) { 
     output[i] = Byte.parseByte(input[i]); 
     System.out.print(output[i]); 
    } 

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

  • Нет связанных вопросов^_^