byte[] als Datei auspacken

Status
Nicht offen für weitere Antworten.

SBS

Aktives Mitglied
Nabend,

ich habe folgenden Code, der mir eine komplette Datei in ein byte[] einliest, klappt anscheinend auch ganz gut...

Code:
protected byte[] readFile(File file)
	{
	    int got = 0;
	    byte read[] = new byte[(int)file.length()];

	    ByteArrayOutputStream bo = new ByteArrayOutputStream();

	    try
	    {
	      FileInputStream fis = new FileInputStream(file);
	      while (got >= 0)
	      {
	        got = fis.read(read);
	        if (got > 0)
	        {
	          bo.write(read, 0, got);
	        }

	      }
	      fis.close();
	      bo.close();

	    }
	    catch (Exception e)
	    {
	    	System.out.println("Fehler beim Dateilesen: "+e);

	    }
	    return bo.toByteArray();
	  }

Jetzt möchte ich dieses Array wieder, als ganze Datei, auspacken - quasi die Funktion umkehren.

So blöd das grad klingt, ich krieg das gedanklich grade nicht hin -.-

Kann mir jemand vielleicht dabei helfen?
Ich möchte hinterher wieder wieder eine funktionsfähige Datei darauskriegen :)
 
A

Anmeldeboykottierer

Gast
SBS hat gesagt.:
Jetzt möchte ich dieses Array wieder, als ganze Datei, auspacken - quasi die Funktion umkehren.

So blöd das grad klingt, ich krieg das gedanklich grade nicht hin -.-

Kann mir jemand vielleicht dabei helfen?
Ich möchte hinterher wieder wieder eine funktionsfähige Datei darauskriegen :)

Hi,

Also ist ja schön, dass du hier Code einfügst, der eine Datei ausliest, aber ich frage mich ehrlich gesagt was du a) mit auspacken meinst und b) wenn du den Code geschrieben und verstanden hast woran du gerade scheiterst.
Das fehlt mal komplett, du zeigst hier Code der Liest und sagst du willst Hilfe beim Gegenstück. Trotzdem habe ich das Gefühl du willst eher eine Lösung haben.
Was komplett fehlt ist dein Ansatz, was hast du schon versucht? Woran scheiterst du gerade? Was denkst du überhaupt wie man ran gehen könnte? ...

Das sollte man ruhig immer in einen Thread reinnehmen, dann kann man dir viel leichter helfen. Vorallem hast du dann überhaupt erst was davon, weil du dann etwas dazu lernst.

An sich solltest du bei der Arbeit mit Ressourcen (wie Dateien) immer auch Ressourcen-Schutzblöcke verwenden. Diese stellen sicher, dass eine Ressource trotz einem Fehler auch wieder "freigegeben" wird. Öffnest du eine Datei zum lesen, so wird je nach OS die Datei für andere Prozesse zum Schreiben gesperrt oder kann nicht verschoben werden, usw. Tritt bei dir ein Fehler auf, wird dass close() nie erreicht, ganz schlecht.
Deshalb solltest du hier immer Blöcke der Form
Code:
Stream s = new Stream();
try {
  ....
}
finally {
  s.close();
}
verwenden.

Ansonsten solltest du dir erstmal überlegen, was du benötigst um eine Datei zu schreiben?
Also einerseits wäre sicherlich das Ziel ganz gut, sprich die Datei in die geschrieben werden soll und dann brauchst du noch Daten die du schreiben möchtest. Hier also schon die Frage, was für Daten möchtest du überhaupt schreiben? Ich gehe hier einfach mal von einem Array von byte aus.

Das ganze sollten also die Argumente sein, die deine Methode braucht. Die Methode kümmert sich dann nur darum, dass diese Daten in die Datei kommen.
Gut, du hast jetzt irgendwie den Code da unten, hm, erstellt? (kopiert?)
Jedenfalls findest du hier einen FileInputStream und der kann etwas aus einer Datei lesen, was könnte man also verwenden um eine Datei zu schreiben? An dieser Stelle sei doch mal auf die Firma SUN verwiesen, die haben auf ihrer Seite java.sun.com eine Dokumentation, in der man auch das API findet, da sind alle Klassen sehr gut drin erklärt. Da schauen wir uns dann FileInputStream an und finden eine sehr ausführliche Erklärung und ein "see also File, FileDescriptor, FileOutputStream". Na ja, man sieht es hier vielleicht schon, aber FileOutputStream könnte etwas in eine Datei schreiben. Folgst du dem Link bestätigt sich dein Verdacht.
Da findest du dann sogar die Methode write(byte[] b) und siehe da, die schreibt das Array b in den Stream.
So, dass ganze als Code

Code:
protected void writeFile(File file, byte[] bytes) throws IOException {
  OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file));
  
  try {
    outputStream.write(bytes);
  }
  finally {
    outputStream.close();
  }
}

Das ist jetzt ungetestet, aber grob sollte es so klappen. Jedenfalls solltest du wirklich versuchen das API zu bemühen und ruhig nochmal genauer an den Stellen fragen, wo du etwas nicht richtig verstehst. Für den nächsten Thread dann auch der Tip, erstmal ein wenig selbst nachdenken und die Ansätze posten, dann kann man dir auch bei denen gut helfen! Davon hast du letztlich einfach mehr!

Gruß Der Anmeldeboykottierer
 

SBS

Aktives Mitglied
Moin, dank, aber ich habe bereits eine Methode die funktioniert,

davon mal abgesehen, den Code habe ich selbst erzeugt, hatte vorher jedoch noch nicht mit einem ByteArrayOutputStream gearbeitet, daher wusste ich nicht ob man das Array zwangsweise wieder mit einem entsprechenden Input Stream auslesen muss - muss man nämlich nicht :)
PS: Es war auch schon recht spät gestern ;)
 

Leroy42

Top Contributor
@Anmeldeboykottierer

Da hast du dir wirklich wahnsinnig viel Mühe gegeben um einem
Anfänger prinzipielle Vorgehensweisen nahezubringen und dann sowas!

Anmeldeboykottierer hat gesagt.:
Code:
protected void writeFile(File file, byte[] bytes) throws IOException {
  OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file));
  
  try {
    outputStream.write(bytes);
  }
  finally {
    outputStream.close();
  }
}

Schäm dich! :noe:

Keine Fehlerbehandlung anzugeben ist etwas, was gerade Anfängern
nun wirklich nicht beigebracht werden soll :(
 

SBS

Aktives Mitglied
:) joa das hab ich aber schon erkannt, so ein blutiger Anfänger bin ich ja nicht mehr, es ist nur 2 jahre her dass ich das letzte mal mit Java gearbeitet habe, daher machen mir auch einfach Sachen zwischenzeitig Probleme.

btw. Wo genau ist der Unterschied zwischen Fehlerabfangen mit try/catch und dem throws Exception Handling, was ist geeigneter? Was sollte man wann verwenden?
 

Leroy42

Top Contributor
Wenn die aufrufenden Methoden über den Fehler informiert
werden müssen, muß man throws verwenden.

Beispielsweise liest du in deinem Programm ein Byte-Array ein.

Code:
fis.read(read);

Die read-Methode selbst muß schon eine Exception
werfen, damit du erkennen kannst, ob ein Fehler
aufgetreten ist.

Den Aufruf von fis.read(read) selbst widerum könntest
du in eine try-catch-Klausel verpacken wobei in der
catch-Klausel ein Fenster mit der Fehlermeldung aufgepoppt
wird oder der Fehler einfach auf System.err oder in eine
Logdatei ausgegeben wird.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Jar-Datei von Byte-Array oder Stream laden? Java Basics - Anfänger-Themen 9
J Byte-Array als Hex-Datei speichern? Java Basics - Anfänger-Themen 9
U byte array in datei 'dumpen' / speichern Java Basics - Anfänger-Themen 2
F Aus Byte Datei lesen Java Basics - Anfänger-Themen 4
tobiasbeil Von Datei byte für byte lesen und in ein Array einfügen. Java Basics - Anfänger-Themen 11
N datei byte für byte auslesen (verständnisproblem) Java Basics - Anfänger-Themen 2
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
T IOStreams read(byte[]b) methode Java Basics - Anfänger-Themen 2
I Dateigröße von einem InputStream oder byte[] bekommen Java Basics - Anfänger-Themen 2
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
G ImageIcon in Byte-Array ablegen Java Basics - Anfänger-Themen 7
D Best Practice Parameter int vs byte Java Basics - Anfänger-Themen 16
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
S Byte-Array kann chars speichern? Java Basics - Anfänger-Themen 3
N Datentypen Image zu Byte-Array Java Basics - Anfänger-Themen 4
M Datentypen Byte, Float und Boolean Java Basics - Anfänger-Themen 13
F byte, short oder doch int? Java Basics - Anfänger-Themen 6
S Performance von byte[], short[], int[]..? Java Basics - Anfänger-Themen 24
D Methoden int to byte array und zurück? Java Basics - Anfänger-Themen 5
P int zu byte Java Basics - Anfänger-Themen 8
F Byte Array wachsen lassen Java Basics - Anfänger-Themen 5
M Java Klasse Byte Java Basics - Anfänger-Themen 10
F Byte Ausgabe plötzlich falsch Java Basics - Anfänger-Themen 0
V String in Byte umwandeln Java Basics - Anfänger-Themen 11
O Input/Output Ein (negatives) Byte über PrintWriter hinausschreiben Java Basics - Anfänger-Themen 3
T byte[] zu String mit Sonderzeichen Java Basics - Anfänger-Themen 2
W Nullpointer bei Objekt Serialisierung mit ArrayList<byte[]> etc. Java Basics - Anfänger-Themen 2
J byte - Ausgabe Java Basics - Anfänger-Themen 2
F Teil eines Byte Array an eine Methode übergeben Java Basics - Anfänger-Themen 5
S byte to float Java Basics - Anfänger-Themen 4
J Byte Folge erkennen Java Basics - Anfänger-Themen 5
M sehr großes Byte Array Java Basics - Anfänger-Themen 3
M Byte Array und Co. Java Basics - Anfänger-Themen 12
T Operatoren Float in byte umwandeln Java Basics - Anfänger-Themen 3
Y File to byte[] and byte[] to sysout Java Basics - Anfänger-Themen 3
P Wann Byte-Stream und wann Character-Stream? Java Basics - Anfänger-Themen 11
F Hexfolge in Byte Array ersetzen Java Basics - Anfänger-Themen 8
P String in byte konvertieren, wie? Java Basics - Anfänger-Themen 4
T Erste Schritte Byte Java Basics - Anfänger-Themen 3
R byte[] zu String und Ausgabe Java Basics - Anfänger-Themen 2
H Variablen short <-> byte[] Java Basics - Anfänger-Themen 15
X Datentypen String in byte[] Java Basics - Anfänger-Themen 29
H Variablen 32bit Zählwert als Byte-Array Java Basics - Anfänger-Themen 9
H Variablen string nach byte Java Basics - Anfänger-Themen 12
B Frage zur Effizienz von read und read(byte[]) Java Basics - Anfänger-Themen 23
R Erste Schritte Rechnenoperationen mit byte, short und char Java Basics - Anfänger-Themen 8
V Datentypen Frage zum Datentyp Byte Java Basics - Anfänger-Themen 11
L Byte[] to String, doch bits sind gespiegelt (MSB/LSB) Java Basics - Anfänger-Themen 3
S Von byte[] nach String zurueck nach byte[]. Arrays sind nicht identisch :( Java Basics - Anfänger-Themen 6
S ArrayList<Byte> in String umwandeln Java Basics - Anfänger-Themen 5
V unsigned byte? Java Basics - Anfänger-Themen 27
M byte Array Mindestlänge Java Basics - Anfänger-Themen 19
U short[] nach byte[] Java Basics - Anfänger-Themen 11
D [jni] jbytearray <-> byte array Java Basics - Anfänger-Themen 8
S Datentypen Ändern eines byte[] Arrays Java Basics - Anfänger-Themen 4
B byte-weise Verschlüsselung Java Basics - Anfänger-Themen 6
P byte Array aus ImageIcon Java Basics - Anfänger-Themen 10
S Input/Output String in byte umwandeln? Java Basics - Anfänger-Themen 5
F von Byte zu 2 Stellig Hex Java Basics - Anfänger-Themen 3
G byte[] (Base64) korrekt übergeben Java Basics - Anfänger-Themen 4
O 64bit- OS byte, short, int oder long bzw. float oder double? Java Basics - Anfänger-Themen 13
G Binär in Byte speichern Java Basics - Anfänger-Themen 7
T Datentypen byte -Division..mal gehts mit cast mal ohne Java Basics - Anfänger-Themen 5
T Datentypen default ist int, cast zu byte nötig... Java Basics - Anfänger-Themen 2
F Byte nach Zahl umwandeln Java Basics - Anfänger-Themen 11
E Datentypen type cast problem (int, byte,) Java Basics - Anfänger-Themen 5
T Datentypen unsigned byte? Java Basics - Anfänger-Themen 9
G Integar zu Byte Java Basics - Anfänger-Themen 4
P Byte mit 0...255? Java Basics - Anfänger-Themen 5
N Datentypen Fehler beim Umwandeln in byte Java Basics - Anfänger-Themen 3
L Umwandlung int <--> byte Java Basics - Anfänger-Themen 2
L Datentypen 250 und byte? Java Basics - Anfänger-Themen 4
L Datentypen byte[] in String und wieder zurück Java Basics - Anfänger-Themen 3
H Datentypen Byte-Array RSA Java Basics - Anfänger-Themen 9
H Datentypen Rechnen mit signed Byte-Array - unsinged byte Java Basics - Anfänger-Themen 3
N Files mit Byte an Socket versenden Java Basics - Anfänger-Themen 2
V Byte -> String -> Byte verlustfrei Java Basics - Anfänger-Themen 12
Hindi93 Byte to Int Java Basics - Anfänger-Themen 4
H Datentypen byte[] to int Java Basics - Anfänger-Themen 9
S hex zu byte Java Basics - Anfänger-Themen 4
M Byte Array: Werte größer 127? Java Basics - Anfänger-Themen 11
S Addition zweier 32 Byte langer ByteArrays Java Basics - Anfänger-Themen 5
H 1 Byte Status Variable Java Basics - Anfänger-Themen 3
P Datentypen Byte und char Typecast Java Basics - Anfänger-Themen 2
M Bit/Byte Operationen Java Java Basics - Anfänger-Themen 8
W Datentypen int -> byte Java Basics - Anfänger-Themen 2
H Datentypen Byte-Array aus Stream lesen Java Basics - Anfänger-Themen 3
F Typenumwandlung byte <=> int verstehen Java Basics - Anfänger-Themen 3
S Byte eines arrays Java Basics - Anfänger-Themen 17
N Frage zu Datentyp byte Java Basics - Anfänger-Themen 14
B unsigned byte Problem Java Basics - Anfänger-Themen 9
S 2 Byte Arrays addieren Java Basics - Anfänger-Themen 45
S Unbekannte Daten einlesen, speichern und in einem byte Array speichern Java Basics - Anfänger-Themen 3
S Alle Datentypen in byte Array und zurückwandeln Java Basics - Anfänger-Themen 2
H Frage zu Byte-Streams Java Basics - Anfänger-Themen 2
Z Wie Byte[] in einen String oder int konvertieren Java Basics - Anfänger-Themen 2
0 byte[] -> hex Java Basics - Anfänger-Themen 2
G char[] in byte[] konvertieren? Java Basics - Anfänger-Themen 2
V Byte Arrays in Strings umwandeln und splitten Java Basics - Anfänger-Themen 2
M unsigned byte Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben