tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
3793
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    soeni1987 soeni1987 ist offline Mitglied Silber
    Registriert seit
    Mar 2006
    Beiträge
    79
    Hallo ich möchte eine Binärdatei byteweise einlesen und in einem Array abspeichern.

    Hab dazu was im Netz gefunden, wo jedoch immer die Fehlermeldung invalid stream header kommt.

    hier der code:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
            FileInputStream fileInputStream = new FileInputStream(dateiname);
            System.out.println("test0");
            ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
            
            System.out.println("test1");
            
            String data[] = (String[]) objectInputStream.readObject();
            
            System.out.println("test2");
            
            objectInputStream.close();
            
            System.out.println("Daten: ");
            System.out.println(data);

    wichtig, das ist keine Textdatei.

    Das Konvertieren wäre ja kein problem wenn der fehler nicht käme bei

    ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);

    Was kann ich da machen?

    Danke und Gruß

    Sönke
     

  2. #2
    Kai008 Kai008 ist offline Mitglied Brillant
    Registriert seit
    May 2008
    Ort
    Brunn/Geb. (Niederösterreich)
    Beiträge
    944
    Blog-Einträge
    1
    Lies mit File.lenght die Größe aus, erstell das Array mit der Länge (Vorsicht, Dateigröße kann leicht die 2 Milliarden von int überschreiten, falls die Datei größer als ca. 1.9 GB ist, wobei du da idR. eh Probleme bekommen solltest.) und ließ mit FileInputStream.read(array, 0, array.lenght) oder read(array).

    OIS sind afaik eine recht heikle Sache, die oft nicht wollen wie der Coder.
     
    Mein kleiner webstart Projektplaner:
    http://178.77.101.236/ppws/
    Ideen, Verbesserungsvorschläge, Bugsmeldungen und allg. Kritik erwünscht und erbeten.

    Danke. :)

  3. #3
    d4rkY89 d4rkY89 ist offline Mitglied Silber
    Registriert seit
    May 2008
    Beiträge
    72
    Nabend zusammen,

    zunächst einmal möchte ich an dieser Stelle klarstellen, dass Daten eines Rechners egal welche Endung eine Datei hat, immer binär sind.
    Die Dateiendungen dienen lediglich dazu diese binären Daten unterschiedlich interpretieren zu können. Demnach kann jede Datei genauso gut eine Textdatei sein und wie eine ausgelesen werden.
    Mit diesem Code kannst du jede x-beliebige Datei byteweise einlesen und jedes einzelne Byte verarbeiten, wie du es gerne möchtest:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
     
     
    public class Foo {
     
        /**
         * @param args
         * @throws IOException 
         */
        public static void main(String[] args) throws IOException {
            File sourceFile = new File("testfile");
            
            FileInputStream in = new FileInputStream(sourceFile);
            
            System.out.print("Daten: ");
            
            for(int i; (i = in.read()) != -1; ) {
                System.out.print(String.valueOf(i));
                // System.out.print(i);     // Falls der Zahlenwert nicht der ASCII code erwünscht ist
            }
            
            //  Verwende diesen Code, wenn du die Datei gleich in ganzen Arrays einlesen willst.
            //  In diesem Fall 512 Bytes
            
            /*byte[] buffer = new byte[512];
            
            for(int i; (i = in.read(buffer)) != -1; ) {
                System.out.print(new String(buffer, 0, i));
            }*/
     
        }
     
    }

    Wie du die Daten in der for-Schleife interpretierst ist ganz Deine Sache.

    Edit:

    Achtung: In der ersten Schleife werden in der Variablen "i" die Bytes, welche einzeln eingelesen werden, gespeichert während in der ausgeklammerten Schleife in der Variablen "i" die Anzahl der gelesenen Bytes gepeichert wird. Angenommen, du hast ein 512 großes Bytearray und die Datei ist nur 400 Bytes groß, dann steht in dem fall in der Variablen "i" die 400. Die einzelnen Bytes werden in dem Bytearray "buffer" gespreichert und können dann bis zur Position "i-1" ausgelesen werden.

    MFG d4rkY89
    Geändert von d4rkY89 (14.03.10 um 22:16 Uhr)
     

Ähnliche Themen

  1. Binärdatei in C
    Von Domsi im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 30.11.10, 14:50
  2. Korrekt byteweise einlesen
    Von Tim Bureck im Forum .NET Café
    Antworten: 2
    Letzter Beitrag: 24.08.10, 19:01
  3. [C] JPG Bild Byteweise auslesen
    Von Pole17 im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 17.07.09, 17:13
  4. PDF-Datei byteweise einlesen - Fehlerhaft
    Von Saskia21 im Forum Java
    Antworten: 5
    Letzter Beitrag: 25.03.08, 20:37
  5. Variablen byteweise in Buffer schreiben
    Von Kangaxx im Forum Delphi, Kylix, Pascal
    Antworten: 1
    Letzter Beitrag: 16.07.07, 21:31