Как написать массив байтов в zip, а затем прочитать его оттуда - PullRequest
0 голосов
/ 03 октября 2018

Извините за мой английский.Мне нужно zzat массив байтов (я делаю это через zip), но я не использую файлы, каналы и буферы.После этого мне нужно выгрузить (разархивировать этот массив в другой массив), я сделал что-то вроде этого, но это не работает:

public class Main {
    public static void main(String[] args) {
        byte[] b = "Help me please".getBytes();               
        ByteArrayOutputStream baos = new ByteArrayOutputStream();     
        try {
            baos.write(b);
        } catch (IOException e) {
            e.printStackTrace();
        }
        try (ZipOutputStream zos = new ZipOutputStream(baos)){
            ZipEntry out = new ZipEntry("1");
            zos.putNextEntry(out);

            zos.closeEntry();
        }
        catch (IOException e){
            e.printStackTrace();
        }
        byte[] a = baos.toByteArray();                               //compressed array

        ByteArrayInputStream bais = new ByteArrayInputStream(a);
        try(ZipInputStream zis = new ZipInputStream(bais)){
                System.out.println('1');
                byte[]c = zis.readAllBytes();
                zis.closeEntry();
                System.out.println(c.equals(b));
        }
        catch (IOException e){
            e.printStackTrace();
        }
    }
}

1 Ответ

0 голосов
/ 03 октября 2018

Следующее сработало для меня.Обратите внимание, что я сначала открываю поток файлов Zip, , затем открываю запись, затем записываю байты.Он должен идти в таком порядке или не работать.

public class ZipFileTest {

   public static void main( String[] args ) throws IOException {
      byte[] b = "Help me please".getBytes( "UTF-8" );
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      try( ZipOutputStream zos = new ZipOutputStream( baos ) ) {
         ZipEntry out = new ZipEntry( "1 First" );
         zos.putNextEntry( out );
         zos.write( b, 0, b.length );
         zos.closeEntry();
      }

      byte[] a = baos.toByteArray();        //compressed array
      ByteArrayInputStream bais = new ByteArrayInputStream( a );

      try( ZipInputStream zis = new ZipInputStream( bais ) ) {
         for( ZipEntry zipe; (zipe = zis.getNextEntry()) != null; ) {
            byte[] data = new byte[1024];
            int length = zis.read( data, 0, data.length );
            System.out.println( "Entry: " + zipe.toString() );
            System.out.println( "Data: " + new String( data, 0, length, "UTF-8" ) );
            zis.closeEntry();
         }
      }
   }
}

Вывод:

run:
Entry: 1 First
Data: Help me please
BUILD SUCCESSFUL (total time: 0 seconds)
...