Je vois un avantage non cité à un format binaire, c'est qu'il est facile
d'avoir un jeu de donnée où la taille est homogène, ce qui permet de se
déplacer rapidement dans le fichier sans avoir à tout en lire ou à
l'indexer.
Je vois un avantage non cité à un format binaire, c'est qu'il est facile
d'avoir un jeu de donnée où la taille est homogène, ce qui permet de se
déplacer rapidement dans le fichier sans avoir à tout en lire ou à
l'indexer.
Je vois un avantage non cité à un format binaire, c'est qu'il est facile
d'avoir un jeu de donnée où la taille est homogène, ce qui permet de se
déplacer rapidement dans le fichier sans avoir à tout en lire ou à
l'indexer.
"Marc G" writes:char const* contents=UneChaine.data();
[...]
output.write((char*)&contents,len);
Tandis qu'ici, la conversion n'est pas nécessaire ; le premier
paramètre de ostream::write est un char const*.
"Marc G" <mgueg...@metrica.fr> writes:
char const* contents=UneChaine.data();
[...]
output.write((char*)&contents,len);
Tandis qu'ici, la conversion n'est pas nécessaire ; le premier
paramètre de ostream::write est un char const*.
"Marc G" writes:char const* contents=UneChaine.data();
[...]
output.write((char*)&contents,len);
Tandis qu'ici, la conversion n'est pas nécessaire ; le premier
paramètre de ostream::write est un char const*.
On Wed, 7 Nov 2007 10:40:35 +0100, "Marc G" :euh, là c'est trop compliqué pour moi... :-)))
C'est pourtant plus simple que réfléchir toi-même à des
spécifications, puisqu'elles sont déjà écrites, il n'y a plus
qu'à les implémenter.
Tu comprends maintenant pourquoi je préfère un format texte ?
On Wed, 7 Nov 2007 10:40:35 +0100, "Marc G" <mgueg...@metrica.fr>:
euh, là c'est trop compliqué pour moi... :-)))
C'est pourtant plus simple que réfléchir toi-même à des
spécifications, puisqu'elles sont déjà écrites, il n'y a plus
qu'à les implémenter.
Tu comprends maintenant pourquoi je préfère un format texte ?
On Wed, 7 Nov 2007 10:40:35 +0100, "Marc G" :euh, là c'est trop compliqué pour moi... :-)))
C'est pourtant plus simple que réfléchir toi-même à des
spécifications, puisqu'elles sont déjà écrites, il n'y a plus
qu'à les implémenter.
Tu comprends maintenant pourquoi je préfère un format texte ?
James Kanze schrieb:"Marc G" writes:char const* contents=UneChaine.data();
[...]output.write((char*)&contents,len);
Tandis qu'ici, la conversion n'est pas nécessaire ; le premier
paramètre de ostream::write est un char const*.
Et le problème est qu'il y a un '&' en trop - le cast
convertit un 'char const**' en 'char*' ce qui n'est
certainement pas ce que Marc voulait faire.
James Kanze schrieb:
"Marc G" <mgueg...@metrica.fr> writes:
char const* contents=UneChaine.data();
[...]
output.write((char*)&contents,len);
Tandis qu'ici, la conversion n'est pas nécessaire ; le premier
paramètre de ostream::write est un char const*.
Et le problème est qu'il y a un '&' en trop - le cast
convertit un 'char const**' en 'char*' ce qui n'est
certainement pas ce que Marc voulait faire.
James Kanze schrieb:"Marc G" writes:char const* contents=UneChaine.data();
[...]output.write((char*)&contents,len);
Tandis qu'ici, la conversion n'est pas nécessaire ; le premier
paramètre de ostream::write est un char const*.
Et le problème est qu'il y a un '&' en trop - le cast
convertit un 'char const**' en 'char*' ce qui n'est
certainement pas ce que Marc voulait faire.
Qu'est-ce qui se passe avec ta fonction sur un systèrme 64
bits ? seuls les 32 bits de poids fort sont utilisés pour le
codage des char, c'est ça ?
Peu importe ; c'est la cuisine interne du compilo (ou plutôt du
processeur).
J'ai un entier ; j'effectue 4 fois la division euclidienne par 256, et
j'enregistre les 4 restes successifs. C'est des maths ; ça n'a rien à
voir avec l'agencement de la RAM ou autre considération matérielle.
sauf que les entiers pourraient être codés sur 64 bits, avec
une valeur max supérieure, non ?
donc je peux lire dans un sens et pas dans l'autre....
Tu as pu voir qu'un format de fichier binaire est un peu
rock'n'roll à gérer. S'il n'y a pas trop de données, je
préfère largement un fichier texte ligne-par-ligne. C'est
lisible (et donc vérifiable et modifiable) directement avec
un éditeur de texte, les spécifications sont généralement
plus faciles à écrire, et le format s'avère souvent plus
souple.
mes fichier comportent surtout des nombres, donc le mode
binaire s'impose.
Le programme écrit des tables de données. Mon premier soucis
est donc que mes clients ne perdent pas leurs données !
Comme je vois que les fichiers binaires sont très rock'n'roll comme tu dis,
j'ai une idée et
j'aimerais que tu me dises ce que tu en penses : j'écris en début de fichier
la taille des différents types utilisés à l'écriture/lecture...
comme ça ne risque pas de dépasser 255, je peux même l'écrire dir ectement
sur 1 octet.
Ensuite quand je veux relire le fichier, je commence par lire
la taille des types et je m'adapte... Qu'en penses tu ?
Qu'est-ce qui se passe avec ta fonction sur un systèrme 64
bits ? seuls les 32 bits de poids fort sont utilisés pour le
codage des char, c'est ça ?
Peu importe ; c'est la cuisine interne du compilo (ou plutôt du
processeur).
J'ai un entier ; j'effectue 4 fois la division euclidienne par 256, et
j'enregistre les 4 restes successifs. C'est des maths ; ça n'a rien à
voir avec l'agencement de la RAM ou autre considération matérielle.
sauf que les entiers pourraient être codés sur 64 bits, avec
une valeur max supérieure, non ?
donc je peux lire dans un sens et pas dans l'autre....
Tu as pu voir qu'un format de fichier binaire est un peu
rock'n'roll à gérer. S'il n'y a pas trop de données, je
préfère largement un fichier texte ligne-par-ligne. C'est
lisible (et donc vérifiable et modifiable) directement avec
un éditeur de texte, les spécifications sont généralement
plus faciles à écrire, et le format s'avère souvent plus
souple.
mes fichier comportent surtout des nombres, donc le mode
binaire s'impose.
Le programme écrit des tables de données. Mon premier soucis
est donc que mes clients ne perdent pas leurs données !
Comme je vois que les fichiers binaires sont très rock'n'roll comme tu dis,
j'ai une idée et
j'aimerais que tu me dises ce que tu en penses : j'écris en début de fichier
la taille des différents types utilisés à l'écriture/lecture...
comme ça ne risque pas de dépasser 255, je peux même l'écrire dir ectement
sur 1 octet.
Ensuite quand je veux relire le fichier, je commence par lire
la taille des types et je m'adapte... Qu'en penses tu ?
Qu'est-ce qui se passe avec ta fonction sur un systèrme 64
bits ? seuls les 32 bits de poids fort sont utilisés pour le
codage des char, c'est ça ?
Peu importe ; c'est la cuisine interne du compilo (ou plutôt du
processeur).
J'ai un entier ; j'effectue 4 fois la division euclidienne par 256, et
j'enregistre les 4 restes successifs. C'est des maths ; ça n'a rien à
voir avec l'agencement de la RAM ou autre considération matérielle.
sauf que les entiers pourraient être codés sur 64 bits, avec
une valeur max supérieure, non ?
donc je peux lire dans un sens et pas dans l'autre....
Tu as pu voir qu'un format de fichier binaire est un peu
rock'n'roll à gérer. S'il n'y a pas trop de données, je
préfère largement un fichier texte ligne-par-ligne. C'est
lisible (et donc vérifiable et modifiable) directement avec
un éditeur de texte, les spécifications sont généralement
plus faciles à écrire, et le format s'avère souvent plus
souple.
mes fichier comportent surtout des nombres, donc le mode
binaire s'impose.
Le programme écrit des tables de données. Mon premier soucis
est donc que mes clients ne perdent pas leurs données !
Comme je vois que les fichiers binaires sont très rock'n'roll comme tu dis,
j'ai une idée et
j'aimerais que tu me dises ce que tu en penses : j'écris en début de fichier
la taille des différents types utilisés à l'écriture/lecture...
comme ça ne risque pas de dépasser 255, je peux même l'écrire dir ectement
sur 1 octet.
Ensuite quand je veux relire le fichier, je commence par lire
la taille des types et je m'adapte... Qu'en penses tu ?
Pour la place, c'est négligeable, mais ça se discute. Cela
dépend de la base de données et aussi de ce que tu ferais en
binaire.
Si tu dois gérer des giga octets ou des terra octets de données, la
place n'est pas négligeable...
En général, si
on utilise le binaire, c'est pour concilier place et vitesse, ça supp ose
donc qu'on étudie chaque champ, ses valeurs minimum et maximum, et do nc
de ne pas se contenter d'écrire des int. Et pour la portabilité,
endianess, encodage et autre joyeusetés seront de la fête tôt ou tard...
tout un poême pour en tirer un avantage notable par rapport au mode t exte !
Pour le temps machine sur la conversion, c'est négligeable aussi, et
même quasi-insignifiant si on lit les données sur un flux lent (à
l'échelle d'un programme C++, même les plus rapides des disque dû rs
fournissent des flux lents, une connexion réseau aussi).
Mais tout ça, à l'ère du XML/HTML à outrances avec plus de tags que de
données, c'est du pinaillage...
Je dirais plutôt qu'utiliser de l'XML là où les performances compte nt
est une ânerie.
Je vois un avantage non cité à un format binaire, c'est qu'il
est facile d'avoir un jeu de donnée où la taille est homogène,
ce qui permet de se déplacer rapidement dans le fichier sans
avoir à tout en lire ou à l'indexer.
Il n'empêche que j'utilise de préférence des formats textes,
mais le binaire a quelques avantages.
Pour la place, c'est négligeable, mais ça se discute. Cela
dépend de la base de données et aussi de ce que tu ferais en
binaire.
Si tu dois gérer des giga octets ou des terra octets de données, la
place n'est pas négligeable...
En général, si
on utilise le binaire, c'est pour concilier place et vitesse, ça supp ose
donc qu'on étudie chaque champ, ses valeurs minimum et maximum, et do nc
de ne pas se contenter d'écrire des int. Et pour la portabilité,
endianess, encodage et autre joyeusetés seront de la fête tôt ou tard...
tout un poême pour en tirer un avantage notable par rapport au mode t exte !
Pour le temps machine sur la conversion, c'est négligeable aussi, et
même quasi-insignifiant si on lit les données sur un flux lent (à
l'échelle d'un programme C++, même les plus rapides des disque dû rs
fournissent des flux lents, une connexion réseau aussi).
Mais tout ça, à l'ère du XML/HTML à outrances avec plus de tags que de
données, c'est du pinaillage...
Je dirais plutôt qu'utiliser de l'XML là où les performances compte nt
est une ânerie.
Je vois un avantage non cité à un format binaire, c'est qu'il
est facile d'avoir un jeu de donnée où la taille est homogène,
ce qui permet de se déplacer rapidement dans le fichier sans
avoir à tout en lire ou à l'indexer.
Il n'empêche que j'utilise de préférence des formats textes,
mais le binaire a quelques avantages.
Pour la place, c'est négligeable, mais ça se discute. Cela
dépend de la base de données et aussi de ce que tu ferais en
binaire.
Si tu dois gérer des giga octets ou des terra octets de données, la
place n'est pas négligeable...
En général, si
on utilise le binaire, c'est pour concilier place et vitesse, ça supp ose
donc qu'on étudie chaque champ, ses valeurs minimum et maximum, et do nc
de ne pas se contenter d'écrire des int. Et pour la portabilité,
endianess, encodage et autre joyeusetés seront de la fête tôt ou tard...
tout un poême pour en tirer un avantage notable par rapport au mode t exte !
Pour le temps machine sur la conversion, c'est négligeable aussi, et
même quasi-insignifiant si on lit les données sur un flux lent (à
l'échelle d'un programme C++, même les plus rapides des disque dû rs
fournissent des flux lents, une connexion réseau aussi).
Mais tout ça, à l'ère du XML/HTML à outrances avec plus de tags que de
données, c'est du pinaillage...
Je dirais plutôt qu'utiliser de l'XML là où les performances compte nt
est une ânerie.
Je vois un avantage non cité à un format binaire, c'est qu'il
est facile d'avoir un jeu de donnée où la taille est homogène,
ce qui permet de se déplacer rapidement dans le fichier sans
avoir à tout en lire ou à l'indexer.
Il n'empêche que j'utilise de préférence des formats textes,
mais le binaire a quelques avantages.
j'ai bien vu des protocols où il y avait
un drapeau dans l'en-tête du buffer pour dire s'ils étaient
grand-boutien ou petit.
j'ai bien vu des protocols où il y avait
un drapeau dans l'en-tête du buffer pour dire s'ils étaient
grand-boutien ou petit.
j'ai bien vu des protocols où il y avait
un drapeau dans l'en-tête du buffer pour dire s'ils étaient
grand-boutien ou petit.
On Tue, 6 Nov 2007 14:18:00 +0100, "Marc G" :char const* contents=UneChaine.data();
output.write((char*)&len,sizeof(std::size_t));
Résultat indéfini : les octets seront bien écrits, mais on ne sait pas
dans quel ordre.
On Tue, 6 Nov 2007 14:18:00 +0100, "Marc G" <mgueguen@metrica.fr>:
char const* contents=UneChaine.data();
output.write((char*)&len,sizeof(std::size_t));
Résultat indéfini : les octets seront bien écrits, mais on ne sait pas
dans quel ordre.
On Tue, 6 Nov 2007 14:18:00 +0100, "Marc G" :char const* contents=UneChaine.data();
output.write((char*)&len,sizeof(std::size_t));
Résultat indéfini : les octets seront bien écrits, mais on ne sait pas
dans quel ordre.
Mais une chose me surprend, pourquoi attacher tant d'importance à l'ordre
des des octets, tout en ignorant l'ordre des bits ?
Mais une chose me surprend, pourquoi attacher tant d'importance à l'ordre
des des octets, tout en ignorant l'ordre des bits ?
Mais une chose me surprend, pourquoi attacher tant d'importance à l'ordre
des des octets, tout en ignorant l'ordre des bits ?
"Fabien LE LEZ" a écrit dans le message de
news:On Tue, 6 Nov 2007 14:18:00 +0100, "Marc G" :char const* contents=UneChaine.data();
output.write((char*)&len,sizeof(std::size_t));
Résultat indéfini : les octets seront bien écrits, mais on ne sait pas
dans quel ordre.
Mais une chose me surprend, pourquoi attacher tant d'importance à l'ordre
des des octets, tout en ignorant l'ordre des bits ?
"Fabien LE LEZ" <gramster@gramster.com> a écrit dans le message de
news:1br0j3tfsbei2vmo3h2ivg5n48s19e5ben@4ax.com...
On Tue, 6 Nov 2007 14:18:00 +0100, "Marc G" <mgueguen@metrica.fr>:
char const* contents=UneChaine.data();
output.write((char*)&len,sizeof(std::size_t));
Résultat indéfini : les octets seront bien écrits, mais on ne sait pas
dans quel ordre.
Mais une chose me surprend, pourquoi attacher tant d'importance à l'ordre
des des octets, tout en ignorant l'ordre des bits ?
"Fabien LE LEZ" a écrit dans le message de
news:On Tue, 6 Nov 2007 14:18:00 +0100, "Marc G" :char const* contents=UneChaine.data();
output.write((char*)&len,sizeof(std::size_t));
Résultat indéfini : les octets seront bien écrits, mais on ne sait pas
dans quel ordre.
Mais une chose me surprend, pourquoi attacher tant d'importance à l'ordre
des des octets, tout en ignorant l'ordre des bits ?