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?
risposta
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.
Suppongo che tu stia parlando di http://incubator.apache.org/thrift/ - potresti voler postare/tagare quale lingua stai usando. – TrueWill