2016-05-28 7 views
0

Я знаю, что когда я пишу новый файл в папку, которая заканчивается на «.zip», он сжимает файл. Это когда вы используете BufferedOutputStream в JAVA и сохраняете файловую систему Windows. Я сохраняю эти файлы на сетевом диске, поэтому время записи зависит от скорости сети.Сохраняет ли файлы в папке «.zip» ускоренное время записи файла на сетевой диск?

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

+1

Попробуйте и посмотрите, записав некоторые данные с сжатием и без него и измерив время. – hexafraction

+0

Хорошим способом минимизации сетевой нагрузки является использование [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

+3

Просто использование «.zip» в качестве расширения файла не автоматически сжимает содержимое ... Вам нужно явно сжать файл с Java. – SamTebbs33

ответ

1

В Вопросе так много заблуждений, я думаю, что стоит пройти через них по одному.

Я знаю, что когда я пишу новый файл в папку, которая заканчивается на «.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 или потерянные файлы, если сетевой ресурс отключится в неудобном месте.

Смежные вопросы