Я создаю инструмент, который извлекает данные из двоичных файлов базы данных. У меня он работает с несжатыми данными фиксированной ширины, но в следующем файле, который я попробовал, используется метод сжатия.
Согласно TRiD (http://mark0.net/soft-trid-e.html) файл на 100% соответствует MP3, чего бы это ни стоило, вот первые несколько байтов файла:
FF FF AD 00 C0 7E AA 00 21 C0 AD 00 AE 02 00 00 00 00 00 00 0C 86 00
00 52 81 00 00 00 00 00 00 CC 01 00 00 42 54 47 42 91 00 00 00 57 01 00 40
32 00 30 00 34 12 EE 1F 00 00 01 00 00 02 01 04 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 1C 73 5A 00 00 49 02 FF 00
02 00 AF 89 00 00 00 00 00 00 6B 04 00 00 56 1C 73 5A B3 06 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00
Мое приложение обычно берет блок двоичных данных, который может находиться в любом месте файла, и сохраняет его в небольшой файл, с которым легко выполнять быстрые манипуляции, пока все данные не выровняются.
Если я хочу сделать это со сжатым файлом, мне нужно сначала распаковать весь файл, а затем сохранить только его часть, или я могу сказать ему, чтобы он взял первые 30 КБ файла, распаковал то, что он нашел, и записал это в файл? Я знаю, что будет много дополнительных символов Unicode / control, но пока строковые значения можно распечатать, я выясню все остальное.
public static FileStream stream = new FileStream(@"DB.dat", FileMode.Open, FileAccess.Read);
public static FileStream shortFile = null;
int limit = 30000;
public MainWindow()
{
byte[] block = new byte[limit];
using (FileStream fs = File.Create("tempfile.dat"))
{
stream.Position = 0;
stream.Read(block, 0, limit);
fs.Write(block, 0, block.Length);
}
InitializeComponent();
}
Обновлено: добавление информации об идентификаторе для образца файла http://64.72.211.216/ZIPCODE.dat
TrID/32 - File Identifier v2.24 - (C) 2003-16 By M.Pontello
Definitions found: 10674
Analyzing...
Collecting data from file: ZIPCODE.dat
100.0% (.MP3) MP3 audio (1000/1)
Mime type : audio/mpeg3
Definition : audio-mp3.trid.xml
Files : 34
Author : Marco Pontello
E-Mail : [email protected]
Home Page : http://mark0.net
Формат сжатия MP3 применяется к тексту, который хранится в базе данных.
Я сбит с толку больше, чем когда-либо. MP3 - это формат с потерями для аудио, специально адаптированный к тонкостям человеческого уха. Вы никогда не отправите текст в оба конца через MP3 ... это просто не сработает.
Т.е. Данные PCM, которые подаются в компрессор MP3, существенно отличаются от данных PCM, которые передаются из декомпрессора MP3. Для человеческого уха это может звучать одинаково, но на этом сходство заканчивается.
Вот образец 64.72.211.216/ZIPCODE.dat
Это не файл MP3. Вы были сбиты с толку из-за неправильной идентификации. Если бы это был настоящий mp3, вы могли бы переименовать его в coolmusic.mp3
и не ожидать ошибок при воспроизведении в аудиоплеере. Это более реалистичный тест, чем тот TRiD
, который вы используете. Такое бывает? Что вы на самом деле пытаетесь здесь сделать? Расшифровать файлы неизвестного происхождения? Откуда на самом деле берутся эти данные и почему вы не знаете, что это такое?
Я знаю, что на самом деле это не музыкальный файл MP3, но есть формат сжатия, используемый MP3, который можно было бы использовать по-другому, верно? Мой первый инструмент извлекает данные из базы данных C-Tree Plus, которой более 20 лет, и после того, как она заработала, я подумал, что посмотрю на их новый формат базы данных, чтобы увидеть, на что способен мой инструмент. В своей работе я подключаюсь к ШИРОКОМУ массиву баз данных (Sybase, Mysql, C-TreeACE, C-Tree Plus, ElevateDB, Cache, MSSQL, список которых продолжает расти). Я всегда знаю, откуда взялся файл, но я ищу, как декодировать строковые значения, тогда я смогу выяснить структуру позже.
Похоже, это было сжатие zlib, я опубликую новый вопрос и задам соответствующий вопрос. docs.faircom.com/doc/v10ace/55874.htm
"есть формат сжатия, используемый MP3, который можно было бы использовать по-другому, не так ли?" Неправильный. MP3 использует психоакустическое моделирование для экономии, которая имеет смысл только с точки зрения звука. Это совершенно не подходит для любых других задач сжатия. «Неприемлемо» означает «вообще не сработает».
Он не похож ни на MP3, ни на ZIP. Он блочно-ориентированный, с блоками размером с дисковый блок (512 байт). Я не знаю, что это такое, но это исключает многие хорошо известные типы файлов.
Я не могу понять, насколько это хорошая идея. Произвольно редактировать фреймы MP3 по тексту? Хм. Из интереса, каков ваш предполагаемый сценарий использования?