В Вопросе так много заблуждений, я думаю, что стоит пройти через них по одному.
Я знаю, что когда я пишу новый файл в папку, которая заканчивается на «.zip», он сжимает файл.
Неправильное. Создание файла с суффиксом «.zip» автоматически не сжимает его. Запись файлов в каталог с именем .zip в качестве суффикса имени файла (?!?) Тоже не существует. Не в Java. Не на других языках.
Чтобы получить сжатие, приложение должно предпринять шаги, чтобы это произошло. В Java вы можете использовать ZipOutputStream
, чтобы записать файл в формате ZIP-файла. Однако ZIP-файл на самом деле является «архивным» форматом, который предназначен для хранения нескольких файлов в ZIP-файле. Если вы просто пытаетесь сжать один файл, есть лучшие альтернативы; например GZIPOutputStream
.
(Возможно также, что эта так называемая «ZIP-папка», о которой вы говорите, является обычным ZIP-файлом, который был «смонтирован» в качестве файловой системы loopback. Вам или кому-то пришлось бы установить это в явном виде. в любом случае, если это то, что здесь происходит, это не имеет ничего общего с Java. все это происходит во внешнем программном обеспечении и в операционной системе, в которой ZIP «монтируется».)
Это при использовании BufferedOutputStream в JAVA и сохранении в файловой системе Windows.
Erm ... no. См. Выше. Однако вы правы, что может лучше использовать файл BufferedOutputStream
для записи файлов, хотя он действительно помогает только в том случае, если ваше приложение записывает файлы в маленькие куски; например байт за раз. (Сжатие потока усложняет проблему, поэтому сложно дать простой общий ответ на этот вопрос.)
Я сохраняю эти файлы на сетевом диске, поэтому время записи зависит от скорости сети.
Исправить. Это также зависит от задержки сети, используемых протоколов и загрузки на удаленном файловом сервере. (Если у вас есть ZIP "смонтирован", то это также добавит накладные расходы.)
Будет ли сохранение в .zip-папке ускорить время записи?
Возможно. См. Выше. Это зависит от того, что вы подразумеваете под ZIP-папкой.
Игнорирование того, что запись файлов (в правильном порядке) в сжатой и/или архивной форме из Java может ускорить запись. Есть на самом деле две вещи, чтобы рассмотреть следующие вопросы:
Для простого сжатия, вы торгуете от времени она принимает заявки (!!) для сжатия и распаковки данных от времени (и дискового пространства) вы экономите путем перемещения и хранения меньшего количества байтов.
Для файлов ZIP (и подобных архивных форматов) есть вторая потенциальная экономия. Хранение и извлечение большого количества отдельных небольших файлов из файловой системы происходит медленно по сравнению с хранением и извлечением одного ZIP-файла, содержащего эти файлы.
Другими словами, это передавать данные без сжатия, а затем сжимает его (так что он не будет ускорить время записи) или же она сжимает затем записать файл?
Есть так много переменных, о которых трудно сказать точно. Но если вы не сделали что-то нечетное, вполне вероятно, что байты передаются по сети в сжатой форме.
Наконец, я бы посоветовал вам не пытаться объединить смонтированные ZIP файлы и общие сетевые ресурсы:
Сочетание двух потенциально может взаимодействовать таким образом, что делает производительность хуже.
Существует риск того, что в конечном итоге вы получите поврежденный ZIP или потерянные файлы, если сетевой ресурс отключится в неудобном месте.
Попробуйте и посмотрите, записав некоторые данные с сжатием и без него и измерив время. – hexafraction
Хорошим способом минимизации сетевой нагрузки является использование [GZIPOutputStream] (https://docs.oracle.com/javase/7/docs/api/java/util/zip/GZIPOutputStream.html) для сжатия данных, отправляющих их по затем разархивируйте его с помощью [GZIPInputStream] (https://docs.oracle.com/javase/7/docs/api/java/util/zip/GZIPInputStream.html) с другой стороны при чтении потока. (GZIP сжимается лучше, чем ZIP). – Majora320
Просто использование «.zip» в качестве расширения файла не автоматически сжимает содержимое ... Вам нужно явно сжать файл с Java. – SamTebbs33