web-dev-qa-db-fra.com

Comment sortir des données binaires dans un fichier en Java?

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?

18
Zeeno

Peut-être que ce fragment vous aidera.

 int i = 42;
 DataOutputStream os = new DataOutputStream(new FileOutputStream("C:\\binout.dat"));
 os.writeInt(i);
 os.close();
38
rajah9

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();
    }
}
2
oliholz