Bit&Hex?

Network

Top Contributor
Hi,

Ich möchte eine Datei auslesen, die keine Textdatei ist. Man kann ja Beispielsweise eine Musikdatei nicht einfach mit einem Texteditor öffnen, den Text in den Zwischenspeicher kopieren, eine neue Textdatei erstellen, dort den Text einfügen und dann als .wav (oder dergleichen) benennen.

Ich nehme an da fallen irgendwo irgendwie Daten weg???

Aufjedenfall dachte ich mir dann, das ich einfach die Bits selbst einlese und in eine neue Datei abspeichere, die dann Test.wav (oder dergleichen) heißt.
Das sollte ja wohl hoffentlich funktionieren.

Jetzt hab ich mir folgendes aus dem Internet gegriffen, um die Bites auszulesen:
Java:
FileInputStream lnr = new FileInputStream("Test.dat");
	int w = 0;
	
	while( (w = lnr.read()) != -1 )
	{
		System.out.println( "" + w );
		System.out.println( "" + (char)w );
	}

Aber von wegen, da kommen keine Bits als System.out heraus sondern Zahlen. Wie z.B. 72, 107... usw.
Ich nehme an das ist der Hexdezimalcode davon? Und wie kann ich ausschlieslich die 0er und 1er anzeigen lassen?


Ich danke für jeden Betrag

PS: Es hat einen bestimmten Grund, und zwar möchte ich an den Bytes beim einlesen etwas bestimmtes verändern und sie erst dann wieder in die neue Datei schreiben.
 

Network

Top Contributor
Vielen Dank.
Das mit den Anführungsnullen lässt sich ja leicht mit einer for-Schleife beheben, die die Nullen hinzufügt.
Leider auf Kosten (wenn viele Zeichen in Datei) der Leistung.

Der Rest der Datei wird aber auch nicht ausgelesen :( Die letzten Bits (wenn kleiner als 8) fallen wahrscheinlich weg.

Einen Weg, wirklich "jeden" Bit aus der Datei zu lesen gibt es nicht?

Also um bspw. ein exaktes Abbild jegmöglicher Datei zu erstellen, mit der Bedingung, dass sie zwischendrin von Java eingelesen und wieder ausgespuckt werden muss.
 

Der Müde Joe

Top Contributor
Ach ja..übersehen..

>und zwar möchte ich an den Bytes beim einlesen etwas bestimmtes verändern

kein Problem. addieren subtrahieren und bitmasken
Java:
int i = 18; // 10010
i += 2; // 10100
i -= 2; //10010
i = i | 0xFF; //11111 EDIT: des ist natürlich falsch. = 255 = 11111111
 
Zuletzt bearbeitet:

Der Müde Joe

Top Contributor
>Das mit den Anführungsnullen lässt sich ja leicht mit einer for-Schleife beheben

Ist ja eigentlich egal. Wie man einen int mit read() von einem InputStream liest, kann man auch einen byte (in int form) schreiben.
OutputStream (Java Platform SE 6)

>Die letzten Bits (wenn kleiner als 8) fallen wahrscheinlich weg.

Hö? Wie meinen der Herr?

>Einen Weg, wirklich "jeden" Bit aus der Datei zu lesen gibt es nicht?

InputStream list einfach bis er am Ende des Streams (woher auch immer) ist. Und wenn sich da noch ein Bit rumtollt kommt halt eine 0 oder eine 1 als int zurück.

>ein exaktes Abbild jegmöglicher Datei zu erstellen,

Da gibts zig möchlikeiten.

zB über einen FileChannel die transfer Methode.
über Input/OutputStream...
zB
Copy a file - Real's Java How-to
 

Neue Themen


Oben