Manipulation des fichiers en Java
TP6 : Pratique
V.Marangozova-Martin, Ludovic Démontes
1 Objectif du TP
Dans ce TP nous allons implémenter un mécanisme de journalisation que
nous allons attacher à l’allocateur mémoire des précédents TP. L’objectif est de
préserver la cohérence de la mémoire en enregistrant sur un support persistant
(les fichiers) les modifications effectuées sur la structure de gestion. Ainsi, à
chaque fois qu’il y a une allocation ou une libération, les informations concernant
l’opération vont être enregistrées dans un fichier. Si le système tombe en panne
(qui peut être simulé par un Ctrl-C...), il sera possible de le relancer et de le
remettre dans un état cohérent en examinant le contenu du fichier journal (log).
2 Manipulation de fichiers en Java
Java fournit de nombreuses classes qui permettent la manipulation de fi-
chiers. Nous n’allons pas toutes les décrire, vous pouvez les consulter dans l’API.
Pour lire un fichier, il est possible de faire ceci :
impo rt jav a . io .*;
class read {
publ ic static void main ( Stri ng args []) throws IOException {
Stri ng thisLi ne ;
Stri ng [] ful lText = new String [10];
int counter = 0;
FileInputStream fis = new FileInputStream ( " filename . extent ion " );
DataInput St ream m yI np ut = new D at aInputStream ( fis );
while (( t hi sL in e = myIn pu t . readLi ne ()) != null ) {
Syst em . out . p rin tl n ( t hi sLi ne );
count er ++;
fullTe xt [ counter ] = thisLi ne ;
}
}
}
Pour écrire dans un fichier, il est possible de faire ceci :
1
Miage3, 2009-2010 2
impo rt jav a . io .*;
class write {
publ ic static void main ( Stri ng args []) throws IOException {
int i ;
Stri ng [] text = new String [3];
text [0] = " Hello , ␣ this ␣ is ␣ some ␣ te xt . ";
text [1] = " Hell o ";
text [2] = " Hell o ␣ World ";
FileOutputStrea m fos = new F il eOutputStream (" theTex t . txt " );
PrintStream m yO utp ut = new PrintStream ( fo s );
for ( i = 0; i < 3; i ++) {
myOutp ut . println ( text [i ]);
}
}
}
3 Création d’un log
Pour créer un log qui enregistre toutes les opérations d’allocation et de li-
bération, nous allons créer un fichier à l’initialisation de la mémoire. Ensuite,
pour chaque opération, nous allons écrire des informations la concernant dans
ce fichier.
Par exemple, si il y a une opération alloc(10), nous allons écrire dans le
fichier
BEGIN
A 10
Si l’opération réussit, nous allons rajouter END. Ainsi, pour cette opération
le fichier log contiendra :
BEGIN
A 10
END
Si l’opération ne réussit pas, nous allons écrire ABORT. La trace de l’opération
dans le log sera donc :
BEGIN
A 10
ABORT
Question 1 Quelles informations proposez-vous d’enregistrer pour les opéra-
tions de libération de mémoire ?
Miage3, 2009-2010 3
Question 2 Si on veut restaurer l’état de la mémoire en utilisant le fichiers
log, comment devrait-on traiter les enregsitrements commençant par BEGIN et
finissant par END ? Et ceux finissant par ABORT ?
Question 3 Implémentez les traitements nécessaires pour la gestion d’un log.
Où allez-vous les insérer dans le code de votre allocateur mémoire ?
Question 4 Simulez le crash de votre système en appuyant sur Ctrl-C. Re-
lancer votre allocateur en restaurant l’état de la mémoire à partir du log. Votre
allocateur devrait pouvoir fonctionner normalement...
Question 5 Dans cette implémentation, le log ne fait que croître. Manipu-
ler un grand fichier va ralentir considérablement votre allocateur. Comment
pourrait-on réduire le log ? Proposer une solution et l’implémenter.
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !