Struttura di formati di file complessi [chiuso]

-1

Supponiamo di voler progettare e implementare un formato di file ampio e complesso, come pdf o docx; come devo strutturarlo? Come possono contenere così tanti tipi di dati diversi come immagini, macro o grafici?

Modifica: per strutture intendo i modi per memorizzare diversi tipi di dati, non penso che un semplice file binario sia così fattibile. Il formato di file che voglio progettare è come una pagina di Word con vari contenuti multimediali. È un'applicazione di word processor per piattaforme mobili che ha bisogno di un formato di file personalizzato per la sua particolare struttura, so che è un'attività che richiede tempo, ma quello di cui ho bisogno è una struttura di base estensibile che posso espandere in futuro

    
posta arabum97 05.09.2017 - 12:50
fonte

1 risposta

3

Suppose I want design and implement a a large and complex file format, like pdf or docx

Se sei da solo, vorrei provare a evitare uno sforzo di specifica così grande . In particolare, considera invece:

  • utilizzando formati testuali come JSON , YAML o forse XML o S-Expressions ; quindi devi ancora specificare come utilizzarli, ad es. definire i nomi degli attributi o dei tag (e specificare i loro ruoli e le regole per utilizzarli).

  • utilizzando esistenti motori di database , forse SQLite o server RDBMS originali come PostGreSQL (o server di database non relazionali à la MongoDB). A proposito, è spesso utile disporre di dati strutturati testuali (ad es. JSON) all'interno di database; ovviamente è ancora necessario specificare uno schema di database e il set di richieste utilizzate su di esso. In alcuni casi, file indicizzati a valori-chiave (à la GDBM o TokyoCabinet ) potrebbe essere sufficiente.

  • utilizzando ed estendendo esistenti interpreti incorporabili (alla Lua o Guile ) e il tuo file diventa uno script per quell'interprete

  • definizione di alcuni (preferibilmente testuali) lingua specifica per il dominio (che è abbastanza vicino per estendere alcuni interpreti ), ispirato a quelli esistenti.

How can they contain so many different data types like images, macros or graphics?

Queste sono solo sequenze di byte con alcuni metadati (forse alcuni tipo di contenuto ).

Se vuoi davvero progettare un formato di file ampio e complesso, pensa prima alla portabilità (tra architetture della macchina: dimensione della parola, endianness) ed estensibilità. Specificare il formato su carta (ad esempio utilizzando una notazione EBNF) e farlo rivedere da altri. Scrivi una libreria di implementazione di esempio per analizzare e generare quel formato (incrementalmente, mentre lo si specifica).

Rendi le tue specifiche pubblicamente disponibili per abilitare il feedback dall'esterno. Crea il tuo software gratuito di libreria di esempio o open source.

I dati spesso sopravvivono al software , quindi lavora duro per ottenere un formato ragionevole giusto.

Se definisci ancora il tuo formato, tieni presente che potrebbero essere necessari anni di lavoro per farlo bene.

Studia i formati di file esistenti prima di inventare i tuoi. Si noti che un formato di file ha successo solo quando le diverse applicazioni lo usano, quindi c'è un importante problema sociale (convincere gli altri ad usare il tuo formato), quindi dovresti provare a specificarlo con altre persone.

Edit: for structures I mean the ways for storing different data types, I don't think that a plain binary file is so viable

Leggi anche la serializzazione .

The file format that I want to design is like a Word page with various multimedia contents

Studia i formati esistenti, ad es. OpenDocument . Se possibile, adattalo. Altrimenti, budget una dozzina di anni di impegno a tempo pieno. Cerca di trovare diversi ingegneri senior per lavorare con te.

(molto probabilmente il tuo formato e il tuo software sarebbero ignorati , considera seriamente questa possibilità)

Ricorda che sui computer attuali l'I / O (rete o disco, anche SSD) è molto più lento della CPU (più di mille volte più lento), quindi l'analisi e la scrittura del tempo della CPU dei formati testuali è generalmente molto inferiore all'ora I / O. In altre parole, la rete o il disco o SSD è sempre il collo di bottiglia. E i formati testuali (à la JSON, ecc.) Sono molto più facili da eseguire il debug.

It's an word processor application for mobile platforms which needs a custom file format for its particular structure,

Consiglierei comunque di utilizzare un formato esistente o almeno un sottoinsieme rigoroso (e uno ben specificato) di alcuni formati esistenti. Perché non puoi usare EPUB, qualche sottoinsieme di OpenDocument o un sottoinsieme di HTML? Guarda anche i formati simili a HTML usati da GTK e Qt, almeno per ispirazione (e magari usando una tale libreria).

Il vantaggio di un simile approccio è che non dovrai codificare molti convertitori (dato che potresti riutilizzarne alcuni esistenti).

PS. Se vuoi semplicemente creare un documento dall'aspetto piacevole (ad esempio in PDF) da un certo codice, considera invece di generare del file testuale per nutrirlo di alcuni composizione come LaTeX o Lout , o trova quindi utilizzare una libreria per emettere file PDF.

    
risposta data 05.09.2017 - 13:55
fonte

Leggi altre domande sui tag