De la Javadoc pour SWT/Jface dans Eclipse
Voilà plusieurs années que je développe des interfaces en SWT/JFace avec Eclipse, et autant d'années que je me galère à consulter la Javadoc de l'API en ligne.
Voilà comment obtenir la Javadoc dans Eclipse :
- en théorie vous avez mis les jars dans votre build path et ils apparaissent dans l'item Referenced Librairies de l'arborescence de votre projet ;
- clic droit sur l'un d'eux pour sélectionner les propriétés ;
- Dans l'item Java Source Attachment, vous n'avez qu'à saisir l'endroit où se situe le fichier jar qui contient les sources (par exemple pour
org.eclipse.jface_3.4.0.I20080606-1300.jarça seraorg.eclipse.jface.source_3.4.0.I20080606-1300.jardans le répertoirepluginsd'Eclipse) ; - si vous n'avez pas les fichiers jars contenant les sources, vous pouvez toujours faire un lien avec l'API en ligne. ça marche tout pareil, sauf qu'il y a une légère latence plus ou moins supportable, à vous de voir. Il suffit d'aller dans l'item Javadoc Location pour y entrer l'URL où se situe la documentation en ligne.
La sérialisation en Java
Je passe une soirée à glander avant de passer aux choses sérieuses... et je me dis que je vais sérialiser mes objets Java à la main pour mon projet Asyd. Il suffit d'implémenter l'interface Externalizable et de jouer avec les flux :
public void writeExternal(ObjectOutput out) throws IOException { ByteArrayOutputStream bout = new ByteArrayOutputStream(); DataOutputStream dout = new DataOutputStream(bout); dout.writeInt(2); dout.writeUTF("muahaha"); out.writeInt(bout.size()); GZIPOutputStream gzout = new GZIPOutputStream((OutputStream) out); gzout.write(bout.toByteArray()); gzout.finish(); }
Ci-dessus on applique un coup de compression GZip sur les données qu'on écrit, pratique pour les objets qui ont beaucoup d'informations à sérializer.
Et pour désérializer, il ne reste plus qu'à faire la même chose dans l'autre sens :
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { int size = in.readInt(); GZIPInputStream gzin = new GZIPInputStream((InputStream) in); byte[] data = new byte[size]; byte[] buf = new byte[1024]; int len; while (len = gzin.read(buf) != -1) { System.arrayCopy(buf, 0, data, len); } ByteArrayInputStream bin = new ByteArrayInputStream(data); DataInputStream din = new DataInputStream(bin); int deux = in.readIn(); String muahaha = in.readUTF(); }
Mouais, ça a l'air bien ennuyant pour pas grand chose... Voyons ce que ça donne. Ma classe représente un dossier et contient dans un tableau de string tous les sous fichiers/dossiers.
| Nombre de sous dossiers/fichiers | Sérialisation par défaut | Sérialisation à la main |
|---|---|---|
| 6 | 757 octets | 161 octets |
| 38 | 2,3 Ko | 360 octets |
| 232 | 14 Ko | 3,4 Ko |
Ça marche plutot bien dans tous les cas