diff --git a/PlaningDeTavail.md b/PlaningDeTavail.md index d907fe8..cf275f8 100644 --- a/PlaningDeTavail.md +++ b/PlaningDeTavail.md @@ -51,7 +51,7 @@ Objectif : Mise en place des fondations techniques |----------------|-------|----| | `BitInputStream.java` | Lecture bit par bit | US-D1 | | `BitOutputStream.java` | Écriture bit par bit | US-D2 | -| `ByteUtils.java` | Conversion int octets | — | +| `ByteUtils.java` | Conversion int octets | US-D3 et plus | | `FileUtils.java` | Méthodes utilitaires fichiers | US-U5 (indirect) | ### `src/vconverter/` diff --git a/DiagrameConvertisseurSimpli.plantuml b/UML/DiagrameConvertisseurSimpli.plantuml similarity index 100% rename from DiagrameConvertisseurSimpli.plantuml rename to UML/DiagrameConvertisseurSimpli.plantuml diff --git a/DiagrameConvertisseurSimpli.png b/UML/DiagrameConvertisseurSimpli.png similarity index 100% rename from DiagrameConvertisseurSimpli.png rename to UML/DiagrameConvertisseurSimpli.png diff --git a/DiagrameConvertisseur_Sprint1EtSprint2.plantuml b/UML/DiagrameConvertisseur_Sprint1EtSprint2.plantuml similarity index 100% rename from DiagrameConvertisseur_Sprint1EtSprint2.plantuml rename to UML/DiagrameConvertisseur_Sprint1EtSprint2.plantuml diff --git a/DiagrameConvertisseur_Sprint1EtSprint2.png b/UML/DiagrameConvertisseur_Sprint1EtSprint2.png similarity index 100% rename from DiagrameConvertisseur_Sprint1EtSprint2.png rename to UML/DiagrameConvertisseur_Sprint1EtSprint2.png diff --git a/Avatar.png b/asset/Avatar.png similarity index 100% rename from Avatar.png rename to asset/Avatar.png diff --git a/src/util/BitOutputStream.java b/src/fr/iutfbleau/sae/util/BitOutputStream.java similarity index 99% rename from src/util/BitOutputStream.java rename to src/fr/iutfbleau/sae/util/BitOutputStream.java index 7220c83..9db7934 100644 --- a/src/util/BitOutputStream.java +++ b/src/fr/iutfbleau/sae/util/BitOutputStream.java @@ -1,3 +1,5 @@ +package fr.iutfbleu.sae.util; + import java.io.IOException; import java.io.OutputStream; diff --git a/src/util/BitInputStream.java b/src/fr/iutfbleau/sae/util/BitinputStream.java similarity index 98% rename from src/util/BitInputStream.java rename to src/fr/iutfbleau/sae/util/BitinputStream.java index ace61de..e81746c 100644 --- a/src/util/BitInputStream.java +++ b/src/fr/iutfbleau/sae/util/BitinputStream.java @@ -1,3 +1,5 @@ +package fr.iutfbleau.sae.util; + import java.io.IOException; import java.io.InputStream; diff --git a/src/fr/iutfbleau/sae/util/ByteUtils.java b/src/fr/iutfbleau/sae/util/ByteUtils.java new file mode 100644 index 0000000..5145973 --- /dev/null +++ b/src/fr/iutfbleau/sae/util/ByteUtils.java @@ -0,0 +1,89 @@ +package fr.iutfbleau.sae.util; + +/** + * Classe utilitaire regroupant des opérations de conversion entre + * entiers et octets. + *

+ * Elle est utilisée pour encoder et décoder les champs binaires + * du format PIF (largeur, hauteur, tailles, etc.). + *

+ * + *

+ * Cette classe : + *

+ * Elle fournit uniquement des conversions octets ↔ entiers. + *

+ */ +public final class ByteUtils { + + /** + * Constructeur privé empêchant l'instanciation. + *

+ * Cette classe est purement utilitaire et ne doit pas être instanciée. + *

+ */ + private ByteUtils() { + // empêche l'instanciation + } + + /** + * Convertit un entier non négatif en deux octets (ordre big-endian). + *

+ * L'octet de poids fort est placé en première position, + * suivi de l'octet de poids faible. + *

+ * + * @param value valeur entière à convertir (0 ≤ value ≤ 65535) + * @return tableau de deux octets : [octetFort, octetFaible] + * @throws IllegalArgumentException si la valeur ne tient pas sur 2 octets + */ + public static byte[] toBytes(int value) { + if (value < 0 || value > 0xFFFF) { + throw new IllegalArgumentException( + "La valeur doit être comprise entre 0 et 65535" + ); + } + + byte[] result = new byte[2]; + + /* + * Extraction de l'octet de poids fort : + * - décalage de 8 bits vers la droite + * - masquage pour ne conserver que les 8 bits utiles + */ + result[0] = (byte) ((value >>> 8) & 0xFF); + + /* + * Extraction de l'octet de poids faible : + * - aucun décalage nécessaire + * - masquage pour conserver les 8 bits de droite + */ + result[1] = (byte) (value & 0xFF); + + return result; + } + + /** + * Reconstruit un entier à partir de deux octets (ordre big-endian). + *

+ * L'octet de poids fort est replacé dans les bits 15 à 8, + * puis combiné avec l'octet de poids faible. + *

+ * + * @param high octet de poids fort + * @param low octet de poids faible + * @return entier reconstruit à partir des deux octets + */ + public static int toInt(byte high, byte low) { + /* + * - masquage pour supprimer le signe des octets Java + * - décalage de l'octet fort vers la gauche + * - combinaison des deux octets par un OU binaire + */ + return ((high & 0xFF) << 8) | (low & 0xFF); + } +}