J'essaie d'écrire des données dans un fichier au format binaire pour la compression. Les données sont entièrement constituées de virgules flottantes, j'ai donc décidé de quantifier les données sur un nombre entre 0 et 65535 afin que les données puissent être écrites sous forme d'entiers non signés sur deux bits et finalement économiser de l'espace. Cependant, je dois sortir ces données quantifiées dans un fichier en binaire au lieu d'Asci lisible par l'homme.
En ce moment c'est ce que je fais
@param outputFile le fichier contenant les données déjà quantifiées sous forme de chaînes dans un fichier .txt
public void generateBinaryRioFile(String materialLibrary,
String outputFile, String group, String mtlAux) {
try {
// Create file
FileWriter fileStream = new FileWriter(outputFile);
try {
BufferedReader br = new BufferedReader(new FileReader(new File(
"idx.txt")));
while ((line = br.readLine()) != null) {
writer.write(line + "\n");
}
try {
br.close();
} catch (FileNotFoundException e) {
e.getMessage();
} catch (IOException e) {
e.printStackTrace();
} BufferedWriter writer = new BufferedWriter(fileStream);
Cependant, cela écrit dans le fichier sous forme de chaîne lisible par l'homme. J'ai besoin qu'il soit écrit sous forme de données binaires. Comment procéder en Java?
Peut-être que ce fragment vous aidera.
int i = 42;
DataOutputStream os = new DataOutputStream(new FileOutputStream("C:\\binout.dat"));
os.writeInt(i);
os.close();
Qu'en est-il du DataOutputStream . Vous pouvez écrire int qui contient 2 de vos entiers de données.
DataOutputStream dos = new DataOutputStream(new FileOutputStream(<path>));
ArrayList<Integer> list = new ArrayList<Integer>();
int sum;
for( int i = 0; i < list.size(); i++ ) {
if(i%2!=0){
sum |= list.get( i ).intValue()<<16;
dos.writeInt( sum );
} else {
sum = list.get( i ).intValue();
}
}