Pourquoi devrais-je utiliser un format de fichier lisible par l'homme?

Pourquoi devrais-je utiliser un format de fichier lisible par l'homme, de préférence à un binaire? Est-il jamais une situation où ce n'est pas le cas?

EDIT: J'ai eu cette explication quand j'ai posté la question, mais elle n'est pas si pertinente maintenant:

en répondant à cette question je voulais référer l'asker à une norme, donc répondre sur la raison pour laquelle l'utilisation d'un format de fichier lisible par l'homme est une bonne idée. Ensuite, j'ai cherché pour l'un, et ne pouvait pas en trouver un. Alors voici la question

53
demandé sur Community 2009-02-20 11:08:53

24 réponses

ça dépend

la bonne réponse est que cela dépend. Si vous écrivez des données audio/vidéo par exemple, si vous le faites dans un format lisible par l'homme, il ne sera pas très lisible! Et les documents word sont l'exemple classique où les gens ont souhaité qu'ils soient lisibles par l'homme, donc plus flexible, et en passant à XML MS vont de cette façon.

beaucoup plus important que le binaire ou le texte est une norme ou pas une norme. Si vous utilisez un format standard, alors il y a des chances que vous et le prochain gars n'ayez pas à écrire un parser, et c'est une victoire pour tout le monde.

suite à cela sont quelques raisons opiniâtres pourquoi vous pourriez vouloir choisir l'un par rapport à l'autre, si vous devez écrire votre propre format (et analyseur).

Pourquoi utiliser lisible par l'homme?

  1. Le gars à côté . Envisagez le développeur de maintenance regardant votre code 30 ans ou six mois à partir de maintenant. Oui, il devrait avoir le code source. Oui, il doit avoir les documents et les commentaires. Mais il ne le fera probablement pas. Et ayant été ce gars, et ayant dû sauver ou convertir de vieilles, extrêmement, précieuses données, je vous remercie pour avoir fait quelque chose que je peux juste regarder et comprendre.
  2. laissez-moi le lire et L'écrire avec mes propres outils . Si je suis un utilisateur d'emacs, je peux utiliser ça. Ou Vim, ou le bloc-notes ou ... Même si vous avez créé de grands outils ou bibliothèques, ils peut-être ne plus courir sur mon quai, ou même plus du tout. De plus, je peux ensuite créer de nouvelles données avec mes outils.
  3. L'impôt n'est pas un grand - stockage est gratuit . Presque toujours l'espace disque est libre. Et si ce n'est pas le cas, vous le saurez. Ne vous inquiétez pas pour quelques crochets d'angle ou des virgules, Habituellement, il ne fera pas beaucoup de différence. L'optimisation prématurée est la racine de tout mal. Et si vous êtes vraiment inquiet il suffit d'utiliser un outil de compression standard, et alors vous avez un petit format lisible par l'homme - n'importe qui peut décompresser.
  4. L'impôt n'est pas un grand - ordinateurs sont rapide . Il pourrait être plus rapide à analyser binaire. Jusqu'à ce que vous ayez besoin d'ajouter une colonne supplémentaire, ou le type de données, ou le soutien à la fois l'héritage et les nouveaux dossiers. (bien que cela soit atténué par tampons de protocole )
  5. il y a beaucoup de bons formats là-bas . Même si vous n'aimez pas XML. Essayez CSV. Ou JSON. Ou. propriété. Ou même XML. Beaucoup d'outils existent déjà pour les analyser dans beaucoup de langues. Et il ne faut que 5 minutes pour les réécrire si mystérieusement tout le code source se perd.
  6. les Diffs deviennent faciles . Lorsque vous vérifiez dans le contrôle de version, il est beaucoup plus facile de voir ce qui a changé. Et l'afficher sur le Web. Ou votre iPhone. Binaire, vous savez que quelque chose a changé, mais vous comptez sur les commentaires pour vous dire ce que.
  7. Fusionne facilement devenir des . Vous avez encore des questions sur le web demandant comment ajouter un PDF à un autre. Cela n'arrive pas avec le Texte.
  8. plus facile à réparer si corrompu . Essayez de réparer un document de texte corrompu par rapport à une archive zip corrompue. J'en ai assez dit.
  9. chaque langue (et plate-forme) peut la lire ou l'écrire . Bien sûr, binaire est la langue maternelle pour les ordinateurs, ainsi, chaque langue soutien binaire. Mais la plupart des langages de script de petits outils classiques fonctionnent beaucoup mieux avec les données textuelles. Je ne peux pas penser à une langue qui fonctionne bien avec le binaire et pas avec du texte (assembleur peut-être) mais pas l'inverse. Et cela signifie que vos programmes peuvent interagir avec d'autres programmes auxquels vous n'avez même pas pensé, ou qui ont été écrits 30 ans avant les vôtres. Il y a des raisons au succès D'Unix.

pourquoi pas, et utiliser binaire au lieu de cela?

  1. vous pourriez avoir beaucoup de données - teraoctets peut-être. Et puis un facteur de 2 pourrait vraiment compter. Mais l'optimisation prématurée est toujours la racine de tout mal. Pourquoi ne pas utiliser un humain maintenant, et convertir plus tard? Il ne prendra pas beaucoup de temps.
  2. le stockage peut être libre mais la bande passante n'est pas (Jon Skeet dans les commentaires). Si vous jetez des fichiers autour du réseau alors la taille peut vraiment faire différence. Même la bande passante vers et depuis le disque peut être un facteur limitatif.
  3. Vraiment la performance intensive code . Binaire peut être sérieusement optimisé. Il y a une raison pour laquelle les bases de données n'ont pas normalement leur propre format de texte.
  4. un format binaire pourrait être la norme . Alors utilisez PNG, MP3 ou MPEG. Il rend le prochain gars travail plus facile (pour au moins les 10 prochaines années).
  5. Il y a beaucoup de bons formats binaires . Certains sont des normes mondiales pour ce type de données. Ou pourrait être une norme pour les dispositifs matériels. Certains sont des cadres de sérialisation standard. Un bon exemple est Google Protocol Buffers . Autre exemple: Bencode
  6. plus facile à intégrer binaire . Certaines données sont déjà binaires et vous devez les intégrer. Cela fonctionne naturellement dans formats de fichiers binaires, mais semble laid et est très inefficace dans les lisibles par l'homme, et généralement les empêche d'être lisible par l'homme.
  7. Obscure délibérée . Parfois, vous ne voulez pas qu'il soit évident ce que vos données font. Le cryptage est mieux que la sécurité accidentelle par l'obscurité, mais si vous cryptez vous pourriez aussi bien le rendre binaire et être fait avec elle.

discutable

  1. plus facile à analyser . Les gens ont affirmé que le texte et le binaire sont plus faciles à analyser. Maintenant clairement la plus facile à analyser est quand votre langue ou la bibliothèque prend en charge l'analyse, et c'est vrai pour certains formats binaires et certains formats lisibles par l'homme, donc ne prend pas vraiment en charge non plus. Les formats binaires peuvent clairement être choisis pour qu'ils soient faciles à analyser, mais ils peuvent aussi être lisibles par les humains (pensez CSV ou Largeur fixe) donc je pense que ce point est discutable. Certains formats binaires peuvent juste être jetés dans la mémoire et utilisé comme tel, de sorte que cela pourrait être dit pour être le plus facile à analyser, surtout si les nombres (pas seulement des chaînes de caractères sont impliqués. Cependant, je pense que la plupart des gens diraient que l'analyse lisible par l'utilisateur est plus facile à déboguer, car il est plus facile de voir ce qui se passe dans le débogueur (légèrement).
  2. plus facile à contrôler . Oui, il est plus probable que quelqu'un manipule des données textuelles dans son éditeur, ou qu'il gémisse lorsqu'un format Unicode fonctionne et qu'un autre ne fonctionne pas. Avec des données binaires qui est moins probable. Cependant, les gens et le matériel peuvent encore manipuler des données binaires. Et vous pouvez (et devriez) spécifier un encodage de texte pour des données lisibles par l'utilisateur, qu'elles soient flexibles ou fixes.

à la fin de la journée, Je ne pense pas que l'un ou l'autre peut vraiment revendiquer un avantage ici.

autre Chose

Êtes-vous sûr que vous voulez vraiment d'un fichier? Avez-vous envisagé une base de données? :- )

Crédits

beaucoup de cette réponse est la fusion des choses que d'autres personnes ont écrit dans d'autres réponses (vous pouvez les voir là). Et surtout merci à Jon Skeet pour ses commentaires (ici et hors ligne) pour avoir suggéré des façons de l'améliorer.

75
répondu Nick Fortescue 2013-08-29 16:41:09

cela dépend entièrement de la situation.

avantages d'un format lisible par l'homme:

  • vous pouvez le lire dans son format "native
  • vous pouvez l'écrire vous-même, par exemple pour des tests unitaires - ou même pour du contenu réel, selon ce que c'est pour

avantages probables d'un format binaire:

  • plus facile à déchiffrer (en termes de code)
  • plus Rapide à analyser
  • Plus efficace en termes d'espace
  • plus facile à contrôler (chaque fois que vous avez besoin de texte, vous pouvez vous assurer QU'il est encodé UTF-8, et la longueur préfixée etc)
  • plus facile d'inclure efficacement des données binaires opaques (images, etc - avec un format de texte que vous obtiendriez en base64)

N'oubliez pas que vous pouvez toujours mettre en œuvre un format binaire, mais produire des outils pour passer à / de un format lisible par l'homme. C'est ce que fait le protocole Buffers framework - en fait, il est assez rare de devoir analyser une version texte d'un protocole buffer, mais c'est très pratique de pouvoir l'écrire sous forme de texte.

EDIT: Juste au cas où cela finit par être accepté de répondre, vous devez également garder à l'esprit la remarque faite par starblue : lisible par les formes sont beaucoup mieux pour comparaison. Je soupçonne il serait faisable pour concevoir un format binaire qui est approprié pour diffing (et où une diff lisible par l'homme pourrait être générée) mais le soutien out-of-the-box des outils existants de diff sera meilleur pour le texte.

26
répondu Jon Skeet 2017-05-23 12:07:20

contrôle de Version est plus facile avec les formats de texte, parce que les changements peuvent facilement être consultés et fusionnés.

surtout MS-Word nous attriste à cet égard.

17
répondu starblue 2009-02-20 08:37:31
  • format Ouvert-pas de binaire de jonglerie
  • lisibilité:)
  • l'Échange entre les plates-formes
  • Débogage aide
  • facilement déchiffré (et facilement converti en n'importe quel format)

un point important: vous écrivez un analyseur une fois, mais lisez la sortie de nombreuses fois. Cela fait pencher la balance en faveur de HRF.

7
répondu dirkgently 2009-02-20 13:17:17

une raison majeure est que si quelqu'un a besoin de lire les données dire, dans 30 ans, le format lisible par l'homme peut être compris. Binaire est beaucoup plus difficile.

si vous avez de grands ensembles de données qui sont binaires par nature (par exemple des images), ils ne peuvent évidemment pas être stockés sous une forme autre que binaire. Mais même dans ce cas, les métadonnées pourraient (et devraient!) être lisible par l'homme.

6
répondu Joonas Pulakka 2009-02-20 08:27:07

il y a quelque chose qui s'appelle L'Art de la programmation Unix .

Je ne dirais pas que c'est bon ou mauvais, mais c'est assez célèbre. Il a un chapitre entier appelé Textuality dans lequel l'auteur affirme que le format de fichier lisible par l'homme sont une partie importante de la façon Unix de programmation.

6
répondu ChrisW 2009-02-20 08:46:08

ils ouvrent la possibilité d'être créé/édité avec des outils autres que les originaux. Des outils nouveaux et de meilleure qualité peuvent être développés par d'autres, l'intégration dans des applications tierces devient possible. Pensez aux fichiers binaires iCal, par exemple - le format aurait-il été un succès?

en dehors de cela: les fichiers lisibles par L'homme améliorent la possibilité de déboguer ou, pour l'utilisateur averti, au moins trouver la raison d'une erreur.

4
répondu Tomalak 2009-02-20 08:16:53

Pros pour binaire:

  • rapide à analyser
  • données généralement plus petites
  • facile à écrire un analyseur pour

Pros pour lisible par l'homme:

  • plus facile à comprendre en lisant-aucun "champ X est réglé à 4 487 ce qui signifie que le réacteur doit être arrêté maintenant"
  • si l'utilisation de quelque chose comme XML facile à écrire un outil qui sera analyser n'importe quel fichier

j'ai dû traiter avec les deux types. Si vous envoyez des données et que vous voulez le garder petit binaire est bon. Si vous souhaitez lire, puis lisible par l'homme est bon.

lisible par l'homme généralement un peu auto-documentant aussi bien. Et avec le binaire, il est très facile de faire des erreurs, et difficile de les repérer.

4
répondu TofuBeer 2009-02-20 08:18:23
  • modifiable
  • lisible (duh!)
  • imprimable
  • Bloc-Notes et vi activé

le plus important , leur fonction peut être décodée à partir du contenu (bien souvent)

3
répondu Learning 2009-02-20 08:19:27

Parce que vous êtes un humain, et tôt ou tard, vous (ou l'un de vos clients) sera en mesure de lire les données.

nous n'utilisons le format binaire que si la vitesse est un problème. Et même alors, le débogage est gênant, donc nous avons ajouté un homme lisible équivalent.

3
répondu Toon Krijthe 2009-02-20 08:26:59

L'interopérabilité est l'argument standard, c'est-à-dire qu'une forme lisible par l'homme est plus facile à traiter pour les développeurs de systèmes disparates, ce qui confère donc un certain avantage.

personnellement, je pense que ce n'est pas vrai, et les avantages de performance des fichiers binaires devrait battre cet argument, surtout si vous publiez votre protocole. Toutefois, L'ubiquité des cadres XML/HTTP pour les interactions machine signifie qu'il est plus facile à adopter.

XML est sur-utilisé.

2
répondu Simon 2009-02-20 08:16:29

Juste une petite illustration où lisible format de document peut être un meilleur choix:

documents utilisés pour déployer l'application en production

nous avions nos notes de version en format word, mais ce document de notes de version a dû être ouvert sur divers environnements (Linux, Solaris) dans la pré-production et la plateforme de production.

Il a également dû être analysé afin d'extraire des données différentes.

en fin de compte, nous sommes passés à une syntaxe basée sur wiki, toujours bien affichée en HTML via un wiki, mais toujours utilisée comme un simple fichier texte dans d'autres situations.

2
répondu VonC 2009-02-20 08:23:45

pour tenir compte de cela, il existe différents niveaux de lisibilité humaine, et tous sont rehaussés par l'utilisation d'un bon éditeur ou d'un bon visualiseur avec un code de couleur, de pliage ou de navigation.

par exemple,

  • JSON est très lisible même en clair
  • XML a le angle bracket tax mais est utilisable lorsqu'on utilise un bon éditeur
  • INI est principalement humain lisible
  • CSV peut être lisible, mais est préférable lorsqu'il est chargé dans une feuille de calcul.
2
répondu garrow 2009-02-20 08:24:36

personne n'a dit, donc je le ferai: la lisibilité humaine n'est pas vraiment une propriété d'un format de fichier (Tous les fichiers sont binaires après tout), mais plutôt d'un format de fichier et d'une combinaison d'application de visualisation.

les formats dits "lisibles par l'homme" sont tous basés sur la couche supérieure d'abstraction d'un des encodages de texte existants. Et les programmes de visualisation (souvent aussi servant d'éditeur) qui sont capables de rendre ces encodages sous une forme lisible par les humains sont très courants.

les normes d'encodage du texte sont répandues et assez matures, ce qui signifie qu'il est peu probable qu'elles évoluent beaucoup dans un avenir prévisible.

habituellement, au-dessus de la couche de codage du texte du format, nous trouvons une couche de syntaxe qui est raisonnablement intuitive compte tenu de la connaissance de l'utilisateur cible et de l'arrière-plan culturel.

D'où les avantages des formats "lisibles par l'homme":

  • à l'Omniprésence de l'convient de téléspectateurs et éditeur.

  • intemporalité (étant donné que les conventions culturelles ne changeront pas beaucoup).

  • facilité d'apprentissage, de lecture et de modification.

la confiance dans la couche d'abstraction supplémentaire produit des fichiers encodés:

  • l'Espace de la faim.

  • plus lent à traiter.

les fichiers "binaires" ne recourent pas à la couche d'abstraction de texte comme base (ou comme dénominateur commun), mais ils pourraient ou non utiliser une sorte d'abstraction Supplémentaire plus appropriée à leur usage et donc, ils peuvent être beaucoup mieux optimisés pour une tâche spécifique à portée de main signification:

  • traitement plus rapide.

  • petite empreinte.

d'autre part:

  • les lecteurs et les éditeurs sont spécifiques à un format binaire particulier et rendent l'interopérabilité plus difficile.

  • les téléspectateurs de n'importe quel format sont moins répandus, parce qu'ils sont plus spécialisés.

  • les Formats peuvent évoluer de manière significative ou devenir obsolètes au fil du temps: leur principal avantage est d'être très bien adapté pour une tâche donnée, et que la tâche ou les exigences des tâches évoluer, le format.

2
répondu Vlad Gudim 2009-04-03 14:18:04

prenez un moment et pensez à une application autre que le développement web.

L'hypothèse que: A) Il a un sens qui est "évident" dans le format de texte est faux. Des choses comme les systèmes de contrôle pour une aciérie ou une usine de fabrication n'ont généralement aucun avantage à être lisibles par l'homme. Le logiciel pour ces types d'environnements aura généralement des routines pour afficher des données d'une manière graphiquement significative.

B) L'Outputting it in le texte est plus facile. Les conversions inutiles qui nécessitent plus de code rendent un système moins robuste. Le fait de la question si vous n'utilisez pas une langue qui traite toutes les variables comme des chaînes alors le texte lisible par l'homme est une conversion supplémentaire. C'est-à-dire que le code supplémentaire signifie plus de code à vérifier, à tester et plus d'occasions d'introduire des erreurs dans l'application.

C) vous devez la Parser de toute façon. Il y a de nombreux cas pour les systèmes DSP sur lesquels j'ai travaillé (C'est-à-dire pas d'interface lisible par L'homme). pour commencer avec.) Les données sont rayées du système en paquets de taille uniforme. La journalisation des données pour l'analyse et le traitement ultérieur est simplement une question de pointer vers le début d'un tampon et d'écrire un multiple de la taille du bloc sur le système d'enregistreur de données. Cela me permet d'analyser les données "intactes" comme le système du client le verrait là où, encore une fois, leur conversion à un format différent entraînerait éventuellement l'introduction d'erreurs. Non seulement cela, si vous n'enregistrez les "convertis données" vous pouvez perdre des informations dans la traduction qui peuvent vous aider à diagnostiquer un problème.

D) le texte est un format naturel pour les données. Aucun matériel que j'ai vu n'utilise une interface "texte". (Mon premier travail en dehors de l'université était d'écrire un pilote de périphérique pour une caméra de balayage de ligne de caméra.) Le système construit sur le dessus de lui fait pourrait, mais pour chaque "PC".

pour les pages web où l'information a un sens" naturel " dans le format de texte, donc assommez-vous. Pour traiter le code source, c'est évident. Mais les environnements informatiques envahissants où même vous réfrigérateur et brosse à dents vont avoir un processeur intégré, pas tellement. Le simple fait de surcharger ces types de systèmes d'ajouter la capacité de traiter du texte introduit une complexité inutile. Vous n'allez pas lier "printf" dans le logiciel pour un micro 8-bit qui contrôle une souris. (Et, oui, quelqu'un doit écrire que les logiciels.)

Le monde n'est pas un endroit noir sur blanc où les seules formes de calcul qui doivent être considérées sont les ordinateurs personnels et les serveurs Web.

même sur un PC, si je peux charger directement les données directement dans une infrastructure de données en utilisant un seul appel de lecture OS et être fait avec elle sans écrire serialize et deserizing routines, c'est fantastique, vérifier un travail CRC blocs -- fait sur le problème suivant.

2
répondu NoMoreZealots 2009-06-23 18:25:04

Uhm ... parce que les formats de fichiers lisibles par l'homme peuvent être lus par les humains? Semble être une très bonne raison de moi.

(Eh bien, pour les fichiers de configuration, il est inévitable qu'ils soient lus (et édités!) par les humains. Les fichiers pour stockage persistant d'une sorte ou de l'autre n'ont pas vraiment besoin d'être lus ou édités par les humains.)

1
répondu Bombe 2009-02-20 08:14:39

Pourquoi devrais-je utiliser un fichier lisible par l'homme format de préférence à un binaire? Est-il jamais une situation où cette n'est-ce pas le cas?

Oui, les volumes compressés (zip, jpeg, mp3, etc.) seraient sous-optimaux s'ils étaient lisibles par un humain.

1
répondu Zach Scrivena 2009-02-20 08:17:53

je suppose que ce n'est pas bon dans la plupart des situations probablement. Je pense que la principale raison pour ces formats tels que JSON et XML est en raison du développement web, et l'utilisation générale sur le web où vous devez être en mesure de traiter des données du côté de l'utilisateur et vous ne pouvez pas nécessairement lire binaire. Un bon exemple d'un mauvais cas d'utiliser un format lisible par l'être humain serait toute chose non textuelle comme les images, la vidéo, l'audio. J'ai remarqué l'utilisation de formats non binaires utilisés dans le développement web où il ne faire sens, je me sens coupable!

1
répondu teh_noob 2009-02-20 08:22:08

souvent les fichiers font partie de votre interface humaine donc ils devraient être conviviaux pour l'homme (pas seulement programmeur)

0
répondu robi-y 2009-02-20 08:19:58

la seule fois où j'utilise un flux binaire pour des fichiers qui ne sont pas des archives, c'est quand je veux cacher des choses à l'observateur occasionnel. Par exemple, si je fais des fichiers temporaires que seulement mon application devrait éditer, j'utiliserai du binaire.

ce n'est pas une tentative d'obscurcir, mais plutôt de décourager l'utilisateur d'éditer le fichier à la main (ce qui pourrait casser l'application).

un cas où cela une bonne idée est de stocker / sauvegarder les données en cours d'exécution sur un jeu.. c'est à dire pour enregistrer votre jeu et continuer plus tard. D'autres scénarios décriraient des fichiers intermédiaires, mais ceux-ci sont généralement binaires / byte compilés de toute façon.

0
répondu Tim Post 2009-02-20 08:44:18

Pourquoi devrais-je utiliser un fichier lisible par l'homme format de préférence à un binaire?

dépend du contenu et du contexte, c'est-à-dire de l'origine et de la destination des données. Si les données sont typiquement écrites directement par un humain, les stocker dans un format qui peut être manipulé par un éditeur de texte est une bonne idée. Par exemple, le code source du programme sera normalement stocké sous une forme lisible par l'utilisateur avec une bonne raison. Cependant, si nous sommes d'archivage cela, ou le partager en utilisant un système de contrôle de version, notre stratégie de stockage va changer.

0
répondu Shane MacLaughlin 2009-02-20 08:44:45

le format humain est plus simple à analyser et déboguer si vous avez un problème avec un champ (exemple: un champ contient un nombre où la spécification dit que ce champ doit être une chaîne de caractères), aussi le format humain est plus closier au domaine de problème.

je préfère le format binaire avec beaucoup de données et je suis sûr que j'ai le logiciel pour l'analyser:)

0
répondu alepuzio 2009-02-20 08:55:35

en lisant la thèse de Fielding sur le repos, j'ai vraiment aimé le concept de propriétés architecturales "; un qui collé était "visibilité". C'est ce dont nous parlons ici: être en mesure de "voir" les données. Avantages énormes lors du débogage du système.

l'Un des aspects que je trouve manquant dans l'autre répond: "151950920 de" faire respecter la sémantique .

à Partir du moment où vous allez pour lisible par l'homme, vous permettez à l'utilisateur notepad stupide de créer des données à être introduites dans le système. Aucune garantie de ces données fait sens. Aucun moyen de garantir que le système répondra de manière raisonnable.

ainsi, dans le cas où vous n'avez pas besoin de notepad-inspecter vos données, et vous voulez appliquer des données valides (par exemple l'utilisation d'une API) plutôt que de valider d'abord, vous feriez mieux d'éviter les données lisibles par l'homme. Si debuggeability est un problème (le plus souvent), de l'inspection des données peut être effectuée en utilisant les API, trop.

0
répondu xtofl 2009-02-20 12:30:44

lisible par l'homme n'est pas égal à plus facile à déchiffrer par code machine.

prenez le langage naturel humain comme exemple. :) L'analyse automatique du langage humain est encore un problème à résoudre.

donc je suis d'accord avec https://stackoverflow.com/a/714111/2727173 qui a beaucoup plus de perspicacité sur cette question.

0
répondu lihlii 2017-05-23 12:01:52