18 Stimmen

Wie kann man binäre Daten in Java in eine Datei ausgeben?

Ich versuche, Daten im Binärformat für die Kompression in eine Datei zu schreiben. Die Daten bestehen ausschließlich aus Fließkommazahlen, daher habe ich mich entschieden, die Daten zu quantisieren, um Ganzzahlen zwischen 0 und 65535 zu erhalten, damit die Daten als zweibitige vorzeichenlose Ganzzahlen geschrieben werden können und letztendlich Platz sparen können. Ich muss jedoch die quantisierten Daten als Binärdatei anstatt als menschenlesbare Ascii ausgeben.

Im Moment mache ich Folgendes

@param outputFile die Datei, die die bereits quantisierten Daten als Zeichenketten in einer .txt-Datei enthält

public void generateBinaryRioFile(String materialLibrary,
        String outputFile, String group, String mtlAux) {

    try {

        // Datei erstellen
        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);

Das schreibt jedoch die Datei als menschenlesbare Zeichenfolge. Ich muss sicherstellen, dass sie als Binärdaten geschrieben wird. Wie macht man das in Java?

39voto

rajah9 Punkte 10606

Vielleicht hilft dieses Fragment.

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

2voto

oliholz Punkte 7367

Was ist mit dem DataOutputStream? Du kannst int schreiben, das 2 deiner Daten-Integer enthält.

DataOutputStream dos = new DataOutputStream(new FileOutputStream());
ArrayList list = new ArrayList();
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();
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X