int zu byte

PissPain

Aktives Mitglied
Java:
package main;

import java.awt.image.DataBufferByte;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.imageio.ImageIO;

public class Main {
	public static void main(String[] args) {
		try (OutputStream outputStream = new FileOutputStream("C:\\Users\\user\\Desktop\\image.txt")) {
			byte[] components = ((DataBufferByte) ImageIO.read(new File("C:\\Users\\user\\Desktop\\image.png")).getRaster().getDataBuffer()).getData(); //Aus einem Bild das byte-array erstellen.
			outputStream.write(components); //Die bytes als String in eine Datei schreiben.
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		try (InputStream inputStream = new FileInputStream("C:\\Users\\user\\Desktop\\image.txt")) {
			byte[] components = new byte[inputStream.available()];
			
			for(int i = 0, b; (b = inputStream.read()) != -1;)
				components[i] = Byte.parseByte(Byte.toString((byte) b)); //Einzelne bytes, die wie Strings behandelt werden, sollen zu bytes gemacht werden, sodass das gleiche array entsteht.
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

Wie schaffe ich es bytes, die als Strings gespeichert wurden, so einzulesen, dass sie wieder diesen gleichen Werten entsprechen? Ich habe keine Ahnung wie ich sowas machen soll.

Im code gibt es auch Informationen dazu.

Hoffe ihr könnt mir helfen :)
 

Gucky

Top Contributor
Also du hast in einem Array als Byte 1 2 3 4 stehen, schreibst '1' '2' '3' '4' in eine Datei und möchtest nun aus diesen Zeichen das Array rekonstruieren?

read() liefert ein Byte unsigned in einem int zurück, also ein Wert von 0 bis 255.
Da ein char aus zwei Bytes besteht, müsstest du zwei Bytes einlesen und diese mit dem Shift Operator zu einem char casten. Daraus erstellst du einen String und parst diesen zurück in ein byte.

Aber dein Code tut etwas anderes:
Er ließt ein Bild ein, erstellt ein byte Array daraus, schreibt dieses Byte Array nicht als String, sondern einfach als bytes, wie sie im Array sind und ließt sie dann sehr kompliziert wieder ein.

PS: Zum Einlesen benutzt man eher eine while-Schleife, da du nicht weißt, wie groß die Datei ist.
 

PissPain

Aktives Mitglied
Ich hatte mir das so gedacht:
Jedes Pixel eines Bildes soll in dieser Liste mit 4 Werten vorkommen. Tut es ja auch.
Diese Werte sind dann immer als byte in der Liste. Z.B. "-1 0 0 0 ..."
Mit diesen Werten kann ich das Bild erstellen (zu unsigned ints "a: 255 b: 0 g: 0 r: 0...")

Mit als String speichern, meine ich einfach, dass die bytes jeweils durch ein Zeichen repräsentiert werden und so gespeichert. In diesem Fall, finge die Datei dann so an: "ÿ " (3 Leerzeichen)
Wenn ich die Datei einlese, will ich diese Zeichen in die dafür stehenden Werte umdrehen.
Also aus "ÿ " soll "-1 0 0 0" werden und so in die Liste kommen.
 

Gucky

Top Contributor
Die Zeichen sind nur eine Entsprechung der Bytes, nicht die Bytes selber.
So ist z.B. 01100001 = 97 entspricht a.
Was du einließt, ist aber nicht das a, sondern 01100001 = 97. Also musst du nur das int in ein byte verwandeln.
 

PissPain

Aktives Mitglied
Ok, ich denke das habe ich verstanden.
Nun das Umwandeln:
Wenn ich die ints, zu bytes gecastet ausgebe, bekomme ich die richtigen Ergebnisse "255 0 0 0" -> "-1 0 0 0"
Aber wenn ich die gecastet in der Liste haben will, wird immer 0 eingetragen.
Das muss irgendwas mit den Werten von read() zu tun haben, da ich das schon mit eigenen Werten ausprobiert habe.

Ich muss mir mal dringend etwas suchen, das mir diese bytes richtig erklärt. Anscheinend habe ich mir die anders vorgestellt.

Danke
 

Gucky

Top Contributor
Wenn du es einließt, castest und ausgibst ist alles richtig aber wenn du es in eine Liste einträgst wird 0 eingetraten?

Poste mal den benutzten Code und Beispielein- und -ausgaben
 

PissPain

Aktives Mitglied
Java:
package main;

import java.awt.image.DataBufferByte;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.imageio.ImageIO;

public class Main {
	public static void main(String[] args) {
		try (OutputStream outputStream = new FileOutputStream("C:\\Users\\user\\Desktop\\image.txt")) {
			byte[] components = ((DataBufferByte) ImageIO.read(new File("C:\\Users\\user\\Desktop\\image.png")).getRaster().getDataBuffer()).getData();
			outputStream.write(components);
			
			for(int i = 0; i < components.length; i++)
				System.out.println(components[i]);
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		try (InputStream inputStream = new FileInputStream("C:\\Users\\user\\Desktop\\image.txt")) {
			byte[] components = new byte[inputStream.available()];
			
			System.out.println(System.lineSeparator() + "Ausgabe der bytes" + System.lineSeparator());
			
			for(int i = 0, b; (b = inputStream.read()) != -1;) {
				components[i] = (byte) b;
				System.out.println((byte) b);
			}
			
			System.out.println(System.lineSeparator() + "Ausgabe der bytes der Liste" + System.lineSeparator());
			
			for(int i = 0; i < components.length; i++)
				System.out.println(components[i]);
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

Und hier die Ausgabe:
Zuerst die Liste des Bildes, dann die Ausgabe der eingelesenen bytes und zuletzt die in der Liste.

Code:
-1
0
0
0
-1
0
0
-76
-1
0
12
55
-1
-1
0
0

Ausgabe der bytes

-1
0
0
0
-1
0
0
-76
-1
0
12
55
-1
-1
0
0

Ausgabe der bytes der Liste

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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
V Jar-Datei von Byte-Array oder Stream laden? Java Basics - Anfänger-Themen 9
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
F Byte 0 und 1 einzelnd zuweisen? Java Basics - Anfänger-Themen 17
G byte [] aus uRL erhalten Java Basics - Anfänger-Themen 11
J Byte-Array als Hex-Datei speichern? Java Basics - Anfänger-Themen 9
G Hex to Byte Java Basics - Anfänger-Themen 13
S Byte in Zahl umwandeln Java Basics - Anfänger-Themen 3
M Double-Wert in Byte[] umwandeln Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben