попробуйте использовать глобальную переменную навигатора: const isChrome = /chrome/.test( navigator.userAgent.toLowerCase() );
Перенесите свой массив байтов с ByteArrayInputStream и подайте его в GZipInputStream
Почему Вы не создаете свой собственный класс, который расширяет OutputStream или, в независимо от того, что пишет архив?
Посмотрите на те образцы, и везде, где они используют FileOutputStream, используйте ByteArrayOutputStream вместо этого. Везде, где они используют FileInputStream, используйте ByteArrayInputStream вместо этого. Остальные должны быть простыми.