ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
3793
3793
EMPFEHLEN
-
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
-
14.03.10 19:45 #2
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. :)
-
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 d4rkY89Geändert von d4rkY89 (14.03.10 um 22:16 Uhr)
Ähnliche Themen
-
Binärdatei in C
Von Domsi im Forum C/C++Antworten: 2Letzter Beitrag: 30.11.10, 14:50 -
Korrekt byteweise einlesen
Von Tim Bureck im Forum .NET CaféAntworten: 2Letzter Beitrag: 24.08.10, 19:01 -
[C] JPG Bild Byteweise auslesen
Von Pole17 im Forum C/C++Antworten: 7Letzter Beitrag: 17.07.09, 17:13 -
PDF-Datei byteweise einlesen - Fehlerhaft
Von Saskia21 im Forum JavaAntworten: 5Letzter Beitrag: 25.03.08, 20:37 -
Variablen byteweise in Buffer schreiben
Von Kangaxx im Forum Delphi, Kylix, PascalAntworten: 1Letzter Beitrag: 16.07.07, 21:31





Zitieren
Login





