Как отправить zip-файл в Android без предварительного сохранения? - PullRequest
0 голосов
/ 23 марта 2020

У меня есть этот код для сжатия в zip-формате некоторых файлов:

 public int zip(List<String> _files, String zipFileName) {
        try {
            BufferedInputStream origin = null;
            FileOutputStream dest = new FileOutputStream(zipFileName);
            ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
                    dest));
            byte data[] = new byte[BUFFER];

            for (int i = 0; i < _files.size(); i++) {
                Log.v("Compress", "Adding: " + _files.get(i));
                FileInputStream fi = new FileInputStream(_files.get(i));
                origin = new BufferedInputStream(fi, BUFFER);

                ZipEntry entry = new ZipEntry(_files.get(i).substring(_files.get(i).lastIndexOf(File.separator) + 1));
                out.putNextEntry(entry);
                int count;

                while ((count = origin.read(data, 0, BUFFER)) != -1) {
                    out.write(data, 0, count);
                }
                origin.close();
            }

            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 1;
    }

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

while ((count = origin.read(data, 0, BUFFER)) != -1) {
                    out.write(data, 0, count);
                }

Есть ли способ сделать это? В настоящее время я просто могу отправить почтовый индекс, используя его сохраненное имя в виде строки.

1 Ответ

2 голосов
/ 23 марта 2020

Нет пути. Объем содержимого ограничен 2 МБ, поэтому он может содержать только очень маленький zip-файл. И получатели не ожидают необработанных данных. Вы также не можете отправлять объекты (например, ZipOutputStream), потому что Intents отправляет только сериализованную версию своих дополнений, так как получатель может быть не в том же процессе.

...