SAE21_2022/Lecture.java

123 lines
4.9 KiB
Java
Raw Normal View History

import java.io.InputStream;
import java.io.*;
import java.io.IOException;
public class Lecture {
private String ce_chemin;
private int data;
/* ===========================================================================================================================================================================
*
* CONSTRUCTEUR
*
* ===========================================================================================================================================================================
*/
public Lecture(String un_chemin)
{
this.ce_chemin = un_chemin;
}
/* ===========================================================================================================================================================================
*
* GET_HEADER
*
* ===========================================================================================================================================================================
*/
public int GetHeader(int n){
try {
/* Ouverture du flux */
InputStream fis = new FileInputStream(this.ce_chemin);
for(int i=-1; i<n; i++){
this.data = fis.read();
}
try{
fis.close();
}
catch(IOException e){
System.out.println("Erreur de fermeture");
return 0;
}
return this.data;
} catch (IOException e) {
System.err.println("Erreur relevé");
return 0;
}
}
/* ===========================================================================================================================================================================
*
* GET_OFFSET
*
* ===========================================================================================================================================================================
*/
public int[] GetOffset(){
//Renvoie le paylodad. Dans notre cas tous les états de nos cases.
// Renvoie le payload dans un tableau ou chaque elt du tableau en est un du payload.
try{
/* Ouverture d'un flux */
InputStream fis = new FileInputStream(this.ce_chemin);
int cette_taille=fis.available();/*cette_taille prend une aproximation de la taille du flux */
int ce_compteur = 0, temp;
int [] ce_tableau = new int[cette_taille-4]; /*-5 pour le header mais +1 pour le -1 de fin de fichier. */
int [] ce_tableau_temp = new int[8]; /*C'est le tab qui va stocker les différents octets */
int[] ce_tab_to_return = new int[0];; /*Tableau qui va être renvoyé et qui va contenir tous les bits dans le non ordre */
/*On skip les 5 premiers octets */
for(int i=0;i<5;i++){
this.data = fis.read();
}
/* ============================= Création tu tableau avec les différents octets en int ========================================== */
while(data != -1){
this.data = fis.read();
ce_tableau[ce_compteur]=this.data;
ce_compteur=ce_compteur+1;
}
/* =============================================================================================================================== */
//Utilisation du tableau différent pour créer un tableau avec tout les octets mais dans le bon sens grace a ma superbe classe Outils ;)
//System.out.println("la taille du tableau vaut : "+ce_tableau.length);
for(int m=0; m<ce_tableau.length; m++){ //length -1 car on ne veux pas traiter le -1;
temp = ce_tableau[m];
for(int n=0; n<8; n++){ //repetition 8 fois pour traiter les 8 bits
ce_tableau_temp[n] = temp&1;
temp = temp >> 1;
}
//outils.printInt(outils.reverse(ce_tableau_temp), 8);
ce_tab_to_return = outils.concatenate(ce_tab_to_return, outils.reverse(ce_tableau_temp));
}
/* =================================================================================================================================== */
try{
fis.close();
} catch(IOException e){
System.out.println("erreur lors de la fermeture");
return null;
}
return ce_tab_to_return;
}
catch(IOException e){
System.out.println("erreur d'ouverture");
return null;
}
}
}