Что вставить заголовок файла двоичных данных

По умолчанию страница jsp устанавливает для флага сеанса значение true. Установите это на странице индекса jsp, и сессия не будет создана.

<%@ page session="false" %>
10
задан Brian Tompsett - 汤莱恩 30 October 2015 в 19:37
поделиться

10 ответов

По моему опыту, пересматривая данные Вам будет нужно, неизменно напрасно тратится время. То, что важно, должно структурировать Ваши метаданные способом, которые расширяемы. Для XML-файлов это просто, но двоичные файлы требуют немного более мысли.

Я склонен хранить метаданные в структуре в конце файла, не начало. Это имеет два преимущества:

  • Усеченные/незавершенные файлы легко обнаруживаются.
  • Нижние колонтитулы метаданных могут часто добавляться в существующие файлы, не влияя на их код чтения.

Самый простой нижний колонтитул метаданных, который я использую, выглядит примерно так:

struct MetadataFooter{
  char[40] creatorVersion;
  char[40] creatorApplication;
  .. or whatever
} 

struct FileFooter
{
  int64 metadataFooterSize;  // = sizeof(MetadataFooter)
  char[10] magicString;   // a unique identifier for the format: maybe "MYFILEFMT"
};

После необработанных данных, нижнего колонтитула метаданных и ЗАТЕМ нижнего колонтитула файла записаны.

При чтении файла ищите в конец - sizeof (FileFooter). Считайте нижний колонтитул и проверьте magicString. Затем ищите назад согласно metadataFooterSize и считайте метаданные. В зависимости от размера нижнего колонтитула, содержавшегося в файле, можно использовать значения по умолчанию для недостающих полей.

Как KeithB указывает, Вы могли даже использовать эту технику для хранения метаданных как строки XML, давая преимущества и полностью расширяемых метаданных, с компактностью и скорости двоичных данных.

14
ответ дан 3 December 2019 в 14:12
поделиться

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

7
ответ дан 3 December 2019 в 14:12
поделиться

Для больших двоичных файлов в дополнение к номеру версии я склонен помещать количество записей и CRC, при этом причина состоит в том, что большие двоичные файлы являются намного более склонными для получения усеченными и/или повреждаемыми со временем или во время передачи, чем меньшие. Я недавно нашел к моему ужасу, что Windows не обрабатывает это хорошо вообще, поскольку я использовал проводник для копирования приблизительно 2 ТБ через несколько сотен файлов к приложенному устройству NAS и нашел, что 2-3 файла на каждой копии были повреждены (не полностью скопированный).

4
ответ дан 3 December 2019 в 14:12
поделиться

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

3
ответ дан 3 December 2019 в 14:12
поделиться

Если бы они являются настолько большими, я зарезервировал бы здоровый блок (64K?) пространства в начале файла и помещенный метаданные там в формат XML, сопровождаемый символом конца файла (Ctrl-Z для DOS/Windows, ctrl-D для Unix?). Тем путем можно исследовать и проанализировать метаданные легко с широким спектром наборов инструментов там для XML.

Иначе я иду с тем, что уже сказали другие люди: метка времени для создания файла, идентификатор, для которой машины это создается на, в основном что-либо еще, о чем можно думать для диагностических целей. И идеально Вы включали бы определение самого формата структуры. При изменении структуры часто это - большая боль для поддержания нужной версии кода вокруг для чтения различных форматов старых файлов данных.

Одно большое преимущество HDF5 как @highpercomp упомянуло, то, что Вы просто не должны волноваться об изменениях в формате структуры, пока у Вас есть некоторая конвенция того, каковы имена и типы данных. Имена структуры и типы данных все хранятся в самом файле, таким образом, можно унести код C к осколкам, и он не имеет значения, можно все еще получить данные из файла HDF5. Это позволяет Вам волноваться меньше о формате данных и больше на структуре данных, т.е. Я не забочусь о последовательности байтов, это - проблема HDF5, но я действительно забочусь об именах полей и т.п..

Другая причина мне нравится HDF5, является Вами, может принять решение использовать сжатие, которое занимает очень небольшое количество времени и может дать Вам огромные победы в пространстве памяти, если данные медленно изменяются или главным образом то же за исключением нескольких ошибочных вспышек интересности.

3
ответ дан 3 December 2019 в 14:12
поделиться

@rstevens сказал 'идентификатор для типа файла'... разумный совет. Традиционно, это назвало магическое число и, в файле, не является ругательством (в отличие от этого, в коде, где это - ругательство). В основном это - некоторое число - обычно по крайней мере 4 байта, и я обычно удостоверяюсь, что по крайней мере одним из тех байтов не является ASCII - что можно использовать для проверки этого, файл имеет тип, который Вы ожидаете с низкой вероятностью того, чтобы быть перепутанным. Можно также записать правило в/etc/magic (или локальный эквивалент), чтобы сообщить, что файлы, содержащие магическое число, являются специальным типом файла.

Необходимо включать номер версии формата файла. Однако я рекомендовал бы не использовать количество SVN кода. Ваш код может измениться, когда формат файла не делает.

2
ответ дан 3 December 2019 в 14:12
поделиться

В дополнение к любой информации Вы нуждаетесь для управления версиями схемы, добавляете детали, которые могут быть значимыми, если Вы диагностируете проблему. Например:

  • метки времени того, когда файл был создан и обновление (если применимо).
  • строка версии от сборки (идеально у Вас есть строка версии, которая автоувеличена на каждой 'официальной' сборке..., это отличается от версии схемы файла).
  • название системы, создающей файл и возможно другие статистические данные, которые относятся к Вашему приложению

Мы находим, что это очень полезно (a) в получении информации, которую мы должны были бы иначе попросить, чтобы клиент предоставил и (b) получающая корректная информация - удивительно, сколько клиентов сообщает, что они выполняют другую версию программного обеспечения к тому, чего требуют данные!

1
ответ дан 3 December 2019 в 14:12
поделиться

Вы могли бы рассмотреть помещение файлового смещения в фиксированной позиции в заголовке, который говорит Вам, где фактические данные начинаются в файле. Это позволило бы Вам изменить размер заголовка при необходимости.

В нескольких случаях я поместил значение 0x12345678 в заголовок, таким образом, я мог обнаружить, если бы формат файла, соответствовал endianism машины, которая обрабатывала его.

1
ответ дан 3 December 2019 в 14:12
поделиться

При помещении номера версии в заголовок, можно изменить ту версию каждый раз, когда необходимо изменить структуру POD или добавить новые поля к заголовку.

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

0
ответ дан 3 December 2019 в 14:12
поделиться

Для больших файлов Вы могли бы хотеть добавить определения данных, таким образом, Ваш формат файла становится самоописанием.

0
ответ дан 3 December 2019 в 14:12
поделиться