Bonjour à tous.
J'aurais besoin d'idée(s) de personnes ayant déjà bossé sur les composants texte avec swing.
Tout d'abord, voici mon idée de départ : créer un composant texte ( type JTextArea dans un premier temps ) qui serait "mappé" sur un fichier texte ( peu importe l'encodage, tous sont gérés mes classes décrites plus bas). C'est à dire que seule la partie visible du composant serait chargée en mémoire dans le composant. Les données visibles seraient extraites d'une part du fichier d'origine et des modifications successives - qui elles seraient bufferisée en mémoire.
A cela deux très gros avantages pour moi :
- Limiter l'occupation mémoire de la JVM dans le cas de gros fichier ( seules les parties visibles le seraient ).
- Limiter les I/O en stockant les modifs en mémoire ( toujours dans le cas de gros fichiers ). En effet, pas besoin de recopier l'intégralité d'un fichier de 2 GO à chaque insertion de caractère.
Bon j'abrège sur la technique :
J'ai créé deux classe TextFile et BinaryFile qui remplissent parfaitement le rôle décrit plus haut. Pour cela elles utilises les méthodes suivantes :
void insert(long offset,Datas datas); // insertion on l'aura compris
void delete(long offset,long length); // '' ''
void replace(long offset,long length,Datas datas); // ''
mais surtout :
Datas getFinal(long offset,long length);
qui me permet de récupérer à n'importe quel instant une partie du fichier final, c'est à dire une fois toutes les modifications effectuées ( ce de manière logique ).
Donc voilà ma question à présent : quel serait pour vous le meilleur moyen d'intégrer ma classe TextFile dans un composant graphique de type texte ?
- J'avais pensé dans un premier temps utiliser DocumentFilter pour mettre à jour le contenu du composant ( je l'ai déjà utilisé, c'est pour ça que j'ai pensé à lui ), mais j'ai un doute sur la propreté d'une telle méthode.
- Ne serait-il pas plus judicieux de faire comme pour les composants MVC ( JTable, JTree etc. ), gérer le contenu au niveau du modèle ? Dans ce cas, quoi faire : étendre Document, PlainDocument, ou autre ?
Toute proposition sera la bienvenue
Faisant cela pour des besoins personnels, je peux fournir le code si des personnes sont intéressées, je suis l'auteur de la totalité.