Простейшим решением оказалось настройка pool: false
, весь запрос выглядит так:
HTTPoison.get(url, [], [
timeout: 5_000,
recv_timeout: 5_000,
proxy: proxy,
hackney: [pool: false],
ssl: [{:versions, [:'tlsv1.2']}]
])
На основе ответа zapl, добавляя try()
приблизительно Closeable
завершения потоки автоматически после использования.
public static void unzip(File zipFile, File targetDirectory) {
try (FileInputStream fis = new FileInputStream(zipFile)) {
try (BufferedInputStream bis = new BufferedInputStream(fis)) {
try (ZipInputStream zis = new ZipInputStream(bis)) {
ZipEntry ze;
int count;
byte[] buffer = new byte[Constant.DefaultBufferSize];
while ((ze = zis.getNextEntry()) != null) {
File file = new File(targetDirectory, ze.getName());
File dir = ze.isDirectory() ? file : file.getParentFile();
if (!dir.isDirectory() && !dir.mkdirs())
throw new FileNotFoundException("Failed to ensure directory: " + dir.getAbsolutePath());
if (ze.isDirectory())
continue;
try (FileOutputStream fout = new FileOutputStream(file)) {
while ((count = zis.read(buffer)) != -1)
fout.write(buffer, 0, count);
}
}
}
}
} catch (Exception ex) {
//handle exception
}
}
Используя Constant.DefaultBufferSize
(65536
) полученный от C# .NET 4
Поток. CopyTo из ответа Jon Skeet здесь: https://stackoverflow.com/a/411605/1876355
я всегда просто вижу, что сообщения используют byte[1024]
или byte[4096]
буфер, никогда не знал, что это может быть намного больше, который улучшает производительность и все еще работает совершенно нормальный.
Вот Stream
Исходный код: https://referencesource.microsoft.com/#mscorlib/system/io/stream.cs
//We pick a value that is the largest multiple of 4096 that is still smaller than the large object heap threshold (85K). // The CopyTo/CopyToAsync buffer is short-lived and is likely to be collected at Gen0, and it offers a significant // improvement in Copy performance. private const int _DefaultCopyBufferSize = 81920;
Однако я набрал его назад к [1 110], который является также несколькими из [1 111] только для сейфа.
Android имеет встроенный Java API. Посмотрите пакет java.util.zip .
Вам следует изучить класс ZipInputStream . Прочтите ZipEntry из ZipInputStream и скопируйте его в файловую систему / папку. Посмотрите аналогичный пример для сжатия в файл zip .