2009-10-13 11 views
5

Mi è stato chiesto di elaborare alcuni file serializzati come oggetti binari (non testo/JSON purtroppo) Thrift, ma non ho accesso al programma o al programmatore che ha creato i file, quindi non ho idea della loro struttura, ordine dei campi, ecc. Esiste un modo per utilizzare le librerie di Thrift per aprire un file binario e analizzarlo, ottenendo un elenco di tipi di campi, valori, nidificazione, ecc.?Come si può decodificare un file di risparmio binario?

+0

Suppongo che tu stia parlando di http://incubator.apache.org/thrift/ - potresti voler postare/tagare quale lingua stai usando. – TrueWill

risposta

7

Sfortunatamente sembra che il protocollo binario di Thrift non esegua assolutamente alcuna codifica dei dati; per decodificare sembra presumere di avere in mano il file .thrift in modo che tu sappia, per esempio, che i prossimi 4 byte siano un numero intero e che non siano effettivamente la prima metà di un float. Quindi sembra che tu sia bloccato, fondamentalmente, guardando i file in un editor esadecimale (o equivalente) e cercando di dedurre i campi in base ai pattern esatti che stai vedendo.

ci sono pochissimi pezzi utile:

Ogni file inizia con un numero di versione, stringa di identificatore di protocollo, e la sequenza. Le mappe inizieranno con 6 byte che identificano i tipi di chiavi e valori (i primi due byte, come codici interi) più il numero di elementi come un intero di 4 byte. I codici di tipo sembrano essere standard (la posizione canonica delle loro definizioni sembra essere TProtocol.h nelle sorgenti di Thrift, ad esempio un valore booleano è specificato dal codice tipo 2, stringa UTF-8 per tipo codice 16 e così via) . Le stringhe sono precedute da un campo di lunghezza intera di 4 byte e gli elenchi sono preceduti dal tipo (1 byte) e da una lunghezza di 4 byte. Sembra che tutti i campi interi siano salvati big-endian e che i punti fluttuanti siano salvati nel formato IEEE (il che dovrebbe rendere il doppio relativamente facile da trovare, almeno).

I file TBinaryProtocol * in Thrift hanno alcuni altri dettagli utili; sul lato positivo, ci sono una serie di diverse implementazioni in modo da poter leggere quelle implementate nella lingua con la quale si è più a proprio agio.

Scusa, so che probabilmente non è molto utile, ma sembra davvero che questa sia tutta l'informazione fornita dal formato binario di risparmio; chiaramente il formato binario è stato progettato con l'intento di conoscere sempre le specifiche esatte del protocollo e che l'obiettivo era minimizzare lo spazio del filo, piuttosto che renderlo facilmente decodificabile alla cieca.

Problemi correlati