Projet INF431 : Wikipédia sur un CD

École polytechnique, cours INF431, sujet proposé par David Monniaux.

Sujet au format PDF

Logiciels suggérés

Vous pourrez sans doute aller plus vite si vous utilisez des « briques » déjà disponibles. Voici une liste de composants que j'ai utilisés ; bien sûr, je ne vous impose pas de reprendre les mêmes.

Serveur Web

NanoHTTPD est un petit serveur HTTP, qui fournit un bon point de départ pour des adaptations (il suffit de dériver la classe et de surcharger des méthodes).

Compression

GZip

Les fichiers .gz compressés par le logiciel GNU zip (gzip) peuvent être décompressés depuis Java à l'aide de la classe GZIPInputStream. Le petit programme suivant lit un fichier texte compressé :

import java.io.*;
import java.util.zip.*;

class ReadGzip {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(new GZI
PInputStream(new FileInputStream("index.html.gz"))));
        while (true) {
            String line = reader.readLine();
            if (line==null) break;
            System.out.println(line);
        }
    }
}

LZMA

L'algorithme LZMA donne généralement de meilleurs résultats que DEFLATE utilisé par GZip, notamment sur les fichiers très redondants. On peut notamment utiliser :

import java.io.*;
import java.util.zip.*;
import p7zip.LZMA.*;

class ReadLzma {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(new LzmaInputStream(new FileInputStream("index.html.lzma"))));
        while (true) {
            String line = reader.readLine();
            if (line==null) break;
            System.out.println(line);
        }
    }
}

Archivage

Tant GZip que LZMA ne font que compresser un flux d'octets en un autre flux d'octets. Ils ne gèrent pas l'archivage de plusieurs fichiers au sein d'un seul. Les bibliothèques standard de Java savent directement lire et écrire le format Zip, via les classes ZipInputStream et ZipOutputStream. Par ailleurs, il existe divers outils permettant de manipuler des archives, dont des outils Unix zip et unzip.

Ce format, outre ses possibilités d'archivage, permet également de compresser les fichiers ; mais il compresse chaque fichier séparément et ne tire donc pas parti de la redondance entre plusieurs fichiers de la même archive. Il faut donc demander au logiciel d'archivage de ne pas compresser, ce qui s'obtient avec l'option -0 de zip.

Données d'essai

Vous pourrez par exemple prendre la documentation de Java.