Bit/Byte Operationen Java

m0nKeY

Mitglied
Hi,
ich bin neu hier im Forum und ich bin auch ein JAVA Anfänger. Also grundlagen in der Prorgrammierung behersche ich, aber viel mehr als einfache Taschenrechneroperationen kann ich nicht so einfach aus dem FF. Vor Allem bin ich noch etwas überwältigt mit den Möglichkeiten bei Java.

Nun mal zu meinem Problem. Ich will eine bestimmten Datenstrom neu formatieren bzw. konvertieren. Dafür ist nur eine einfache neu anordnung von Bits und Bytes notwendig. Dafür würde ich gerne Byteweise ein File lesen um es dann Byteweise wieder in eine neue Datei zuschreiben. Dabei werden nicht alle gelesenen Byte weiter verwendet und geschrieben. Ich hab bereits damit rum probiert ein File in ein Byte Array zu schreiben. Ich denke aber nicht, dass das klug für meine Anwendung ist, denn dann muss die ganze Datei erst in den Speicher geladen werde, bei großen Dateien ist das weniger schlau. Folgeden Code hab ich bereits geschrieben, ist aber nur ein Anfang. :)

Java:
import java.io.*;

public class AES2WAVE {
	public static void main(String[] args) throws Exception, IOException, UnsupportedEncodingException
	{
		String infile = "aes3.stream", outfile = "aes3.wav";
		if ( args.length > 0 )
		{
			infile = args[0];
		}
		if ( args.length > 1 )
		{
			outfile = args[1];
		}
		File aes3 = new File(infile);
		FileInputStream instream = new FileInputStream (aes3);
		byte[] data = new byte[(int) aes3.length()];
		instream.read(data);
		instream.close();
		for(int i = 0; i < aes3.length()/32; i++)
		{
			int channel = 8;
			for(channel = 1; channel <= 8; channel++)
			{
				/* Hier muss die Routine für die Umrechnung rein */
			}
		}
		System.out.println(new String(data, "UTF-8"));
	}
}

Bleibe ich bei dieser Methode dann würde ich gerne wissen wie ich jewals 4 Byte aus dem Array lese und bearbeite. Hier mal der Pseudocode für die eigentlich Routine.

Java:
WriteWaveHeader()

For each sample of input data
{
    For channel is 1 .. 8
    {
        Read 4 bytes from the source data
        If channel is less than or equal to number of channels
        {
            If data is 16 bits
                build a 16-bit word from source byte 2, top 4 bits,
                    followed by byte 3 bottom 4 bits, then byte 3 top 4 bits,
                    then byte 4 bottom 4 bits
           
            If data is 24 bits
                build a 24-bit word from source byte 1, top 4 bits,
                    followed by byte 2 bottom 4 bits, then byte 2, top 4 bits,
                    then byte 3 bottom 4 bits, then byte 3 top 4 bits,
                    then byte 4 bottom 4 bits

            Write the new value to the output file
        }
    }
}

Ich hoffe finde hier Hilfe und Rat.

Danke schonmal,
Gruß m0nKeY
 
S

SlaterB

Gast
ganz schön viel Text und Code, wenn die Frage nur darin besteht, wie man paar Bytes auslesen kann,

stream.read(array) ist dafür schon richtig, nur das Array klein machen, Länge 4 oder 8,
und dann in einer Schleife mehrfach read aufrufen,

der Rückgabewert der Methode wird dann wichtig, alles kleiner der Länge des Arrays bedeutet,
dass die Datei zu Ende ist und das Array gar nicht oder nur zum Teil beschrieben wurde,


Achtung: Rest des Arrays kann dann noch die Daten vom vorherigen Durchlauf enthalten,
nicht doppelt verarbeiten,

falls die Länge der Datei immer durch 4, 8 oder gar 32 teilbar ist, dürfte das weniger ein Problem sein
 

m0nKeY

Mitglied
Naja, ich muss mich ja erstmal kurz vorstellen und ungefähr einen Stand meiner Fähigkeiten vermitteln oder? :)

Okay, die Schleife krieg ich schon hin, aber wie begrenze ich die Größe des Arrays und wie mach ich es, dass nachdem Byte 1-4 verarbeitet wurden, danach mit Byte 5-8 weiter gemacht und nicht wieder von vorne bei Byte 1 angefangen wird. Wie gesagt, ich bin Anfänger und bin eher hardwarenahe Programmierung in C gewohnt und da auch nicht sehr komplex.

Gruß m0nKeY

P.S.: Ok, Arraygröße ist leicht fest zu legen. Dumme Frage. Es bleibt aber die Frage wie schaff ich es hin, dass nach Byte 1-4 auch Byte 5-8 gelesen werden. :)
 
Zuletzt bearbeitet:
S

SlaterB

Gast
aber wie begrenze ich die Größe des Arrays

byte[] data = new byte[4];
oder 8

> wie mach ich es, dass nachdem Byte 1-4 verarbeitet wurden, danach mit Byte 5-8 weiter gemacht [wird]

noch machst du ja nicht mal was mit Byte 1-4, wieso da schon weiterdenken?
programmiere erstmal den Anfang,
danach weiter mit höheren Indexen, oder wenn es derselbe Code wäre, dann die Aktion besser in eine Untermethode auslagern,
und diese mit verschiedenen Parametern aufrufen

überhaupt sollte das Array vielleicht nur 4 Bytes lang sein, dann musst du immer 1-4 verwenden, nur für jeden Channel das Array neu lesen oder so
 

sambalmueslie

Bekanntes Mitglied
Spannend ist auch die frage, für was du AES3 nach Wave konvertierst :)
ok ich gebs zu bisschen off-topic :) .. aber interessieren würde es mich trotzdem :)

Gruß Oli
 

m0nKeY

Mitglied
Tja. :)
Ich schreibe grad an meiner Diplomarbeit über den Dateioverhead von Multimediacontainer im professionellen Bereich, als da wäre MPEG2-TS, MXF und MOV. Dafür will ich dann einen Calculator schreiben. Da ich meine Daten aber über MXFs Files bekomme die D10 Daten enthalten, welche aus AES3 Audio und MPEG50 Videodaten besteht. Muss ich die Audiodaten in Wave convertieren damit ich sie in eine TS Datei muxen kann.
Deshalb hab ich schonmal angefangen einen Covertierungstool dafür zu schreiben, ist dann gleichzeitig auch etwas Übung für den Calculator später. Leider hab ich heute fest gestellt, dass ich über den Pseudocode nicht unbedingt meine Daten convertieren kann. Ich muss also erst noch ein paar Standards rechachiere.

Gruß
m0nKeY
 

m0nKeY

Mitglied
So,
der Pseudocode sollte doch funktionieren und ich hab begonnen, das Bitumsortieren zu programmieren. Dabei möchte ich ein Byte aus dem Array das ich erstellte habe shiften und zwar mit folgendem Befehl.

Java:
data[1] = (byte) (data[1] >>> 4);

Damit sollte eigentlich die Bits nach rechts raus geschoben werden und am MSB Nullen angehängt werden, komischerweise funktioniert das nicht mit dem Datentyp Byte. Stattdessen werden auch 1en angehängt. Hat jemand eine Lösung?

Gruß m0nKeY

P.S.: Sry wegen Doppelpost, aber den letzten Beitrag nicht mehr ändern.
 
S

SlaterB

Gast
Java:
public class Test
{
    public static void main(String[] args)
    {

        byte b = 20;
        System.out.println(Integer.toBinaryString(b) + ", " + b);
        b = (byte)(b >>> 1);
        System.out.println(Integer.toBinaryString(b) + ", " + b);

        b = -20;
        System.out.println(Integer.toBinaryString(b) + ", " + b);
        int x = b >>> 1;
        System.out.println(Integer.toBinaryString(x) + ", " + x);
        b = (byte)x;
        System.out.println(Integer.toBinaryString(b) + ", " + b);
    }
}
->
Code:
10100, 20
 1010, 10
11111111111111111111111111101100, -20
 1111111111111111111111111110110, 2147483638
11111111111111111111111111110110, -10
(zwei Leerzeichen manuell eingefügt, da kann man sich 0en denken)
 

m0nKeY

Mitglied
Danke, ich habs jetzt ähnlich gelöst. Ich hab einfach nur mit int gearbeitet und am Ende zu short konvertiert. Was haltet ihr davon?

Java:
static short Create16BitPCMSample (byte[] data)
	{
		int buffer = (ByteToInt(data[1]) >>> 4) << 12;
		int temp = buffer;
		buffer = (ByteToInt(data[2]) << 28) >>> 20;
		temp  |= buffer;
		buffer = (ByteToInt(data[2]) >>> 4) << 4;
		temp |= buffer;
		buffer = (ByteToInt(data[3]) << 28) >>> 28;
		temp |= buffer;
		short word = IntToShort(temp);
		return word;
	}

static int ByteToInt( byte b )
	{
	  return (b & 0xff);
	}
	
	static short IntToShort( int b )
	{
	  return (short) (b & 0xffff);
	}
 
Ä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
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
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
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