Bytearray: immer 4 Bytes herrauskopieren, bis fertig !

Status
Nicht offen für weitere Antworten.
T

Tom21

Gast
Hallo Leute,

hoffe ihr könnt mir helfen.

ich habe einen ByteoutputStream. welches mir mit .tobytearray() einen bytearray zurückgibt.

Meine Frage:

Ich muss diesen bytearray einer write-Funktion übergeben.
Die write-Funktion, kann aber nur blockweise 4Bytes schreiben.


Code:
ByteArrayOutputStream output = new ByteArrayOutputStream();

//...

byte[] bytestream = output.tobytearray();

byte[] sendBuffer = new byte[4];

write(addr, sendBuffer);

D.h. Ich brauche etwas womit ich immer 4 Bytes aus dem langen bytestream herauskopiere und es der write-Funktion übergebe, bis alle Daten aus bytestream geschrieben sind.

Kennt jemand vielleicht eine elegante Lösung dafür??
Habe gelesen das es Arrays.copyofRange() und System.arraycopy() gibt. welches davon sollte ich nutzen, und was wäre eine elegante Lösung ??

gruss

Tom
 

Marco13

Top Contributor
Hey, copyOfRange (seit Java 1.6) kannte ich noch garnicht. Hierfür wäre aber arraycopy sinnvoller: Man will ja keinen neuen Array erstellen, sondern immer nur (andere) Daten in ein und denselben Array kopieren.

Code:
byte[] bytestream = output.tobytearray();
byte[] sendBuffer = new byte[4];
for (int i=0; i<bytestream.length; i+=4)
{
    System.arraycopy(bytestream, i, sendBuffer, 0, 4);
    write(addr, sendBuffer);
}
Ggf. aufpassen, wenn bytestream.length nicht durch 4 teilbar ist.
 
G

Guest

Gast
Hallo Marco13,

das ist auch das Problem. Wenn bytestream.length nicht durch 4 teilbar ist. Ich muss dann die restlichen Daten auch als 4 Block schreiben.

Wie kann ich das machen?
 

Marco13

Top Contributor
Man muss halt so viele 4er-Blöcke schreiben, wie da sind, und die letzten 1...3 bytes dann in einen Block packen, bei dem der Rest mit 0en aufgefüllt ist.... Da kann man jetzt drüber philosohieren, welche Lösung da am ästhetischsten ist....
Code:
byte[] bytestream = output.tobytearray();
byte[] sendBuffer = new byte[4];
int blocks = bytestream.length  / 4;
for (int i=0; i<blocks; i++)
{
    System.arraycopy(bytestream, i*4, sendBuffer, 0, 4);
    write(addr, sendBuffer);
}
int padding =  bytestream.length - (blocks * 4);
Arrays.fill(sendBuffer, 0);
System.arraycopy(bytestream, (blocks-1)*4, sendBuffer, 0, padding);
write(addr, sendBuffer);
oder
Code:
byte[] bytestream = output.tobytearray();
byte[] sendBuffer = new byte[4];
for (int i=0; i<bytestream.length; i+=4)
{
    Arrays.fill(sendBuffer, 0);
    int len = 4;
    if (i+len > bytestream.length) len = bytestream.length-i;
    System.arraycopy(bytestream, i, sendBuffer, 0, len);
    write(addr, sendBuffer);
}
oder, oder, oder....
 
T

Tom21

Gast
Hallo Marco13,

vielen Dank . . . werde mal schauen welche der beiden Lösungen ich nutze. . .

Danke für deine Hilfe ...

Gruss Tom
 
T

Tom21

Gast
Hallo,

habe jetzt ein weiteres Problem am Hals...


Im Beispiel unten, kann ich meine Daten erst ab Byte2 oder Byte3 usw. des ersten Blockes schreiben.

Jetzt wirds halt echt kompliziert.


habe eine read-Funktion

Code:
byte[] recvBuffer = new byte[16];
 read(BlockNr, recvBuffer);
kann also immer nur 16Byte lesen.


Code:
BlockNr          Byte0    Byte1      Byte2     Byte3
----------------------------------------------------------
1                   11         END           DATA2    DATA3
2                   DATA4   DATA5    DATA6    DATA7
3                   DATA8   DATA9    DATA10  DATA11
4                   DATA12 DATA13  DATA14  DATA15
5                   DATA16 DATA17  DATA18  DATA19
6                   DATA20 DATA21  DATA22  DATA23

wie bekomme ich meine Daten jetzt komplett ab dem Byte2 des blockes 1 geschrieben.

Ich muss den ersten Block erstmal auslesen und schauen wann das END kommt. Ab END geht es wieder los mit meinen Daten.

Wäre echt super wenn du mir da noch ein tipp geben könntest.

Danke Tom
 
T

Tom21

Gast
ach ja, noch vergessen zu erwähnen.

die read-Funktion adressiert blockweise. Block1, Block2 etc..
 

Marco13

Top Contributor
Tom21 hat gesagt.:
Im Beispiel unten, kann ich meine Daten erst ab Byte2 oder Byte3 usw. des ersten Blockes schreiben.
Na DAS ist ja mal eine präzise Spezifikation :toll: :roll: Byte 2 oder 3 und so weiter.... naja, wie auch immer: Mit System.arraycopy kann man (Teil)-Inhalte von Arrays kopieren. Die Frage, welche indizes man dabei angeben muss, muss derjenige beantworten, der weiß, was dort gemacht werden soll. Bring ja nichts, wenn ich jetzt sage: "Setz' in dem code unten noch ein
System.arraycopy(bytestream, i*4+getOffset(), sendBuffer, 0, 4);
ein...". Die getOffset-Methode würde dann eben so aussehen:
Code:
int getOffset()
{
    return 2 || 3 & soWeiter;
}
(jaja, das letzte war ein Witz...)
 
T

Tom21

Gast
hi , :wink:

Ich meinte eigentlich, dass wenn Daten schon drinstehen, dann sollte ich sie nicht überschreiben.
deswegen die unpräzise Spezifikation mit Byte2 oder Byte3 ;-)

Werde mir etwas zusammenbasteln müssen. ;-)

Danke für deine Hilfe.

Gruss Tom
 

Marco13

Top Contributor
Hämja ... wenn man beim arraycopy für den ZIELarray irgendeinen Index angibt, dann werden wirklich NUR die elemente überschrieben, die beim gegebenen Index anfangen - und zwar genau so viele, wie als letzter parameter vom arraycopy angegeben wurden... FALLS du das meintest.........
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Bytearray senden via SerialPort Java Basics - Anfänger-Themen 7
F BitSet und ByteArray Java Basics - Anfänger-Themen 0
T udp -> bytearray -> image -> ausgabe via frame Java Basics - Anfänger-Themen 6
R Datentypen ByteArray aus einer .class erzeugen Java Basics - Anfänger-Themen 3
C Bytearray unkonvertiert ausgeben Java Basics - Anfänger-Themen 4
G String [HEX] To ByteArray Java Basics - Anfänger-Themen 12
G bytearray als Datei speichern? Java Basics - Anfänger-Themen 6
K Bytearray durchsuchen! Java Basics - Anfänger-Themen 6
R Integer in ByteArray Java Basics - Anfänger-Themen 11
R String in ByteArray suchen Java Basics - Anfänger-Themen 9
T JDOM - Document build aus byteArray? Java Basics - Anfänger-Themen 5
J String to ByteArray Java Basics - Anfänger-Themen 5
G XML als byteArray generieren Java Basics - Anfänger-Themen 4
krgewb Immer dieselbe Zufallszahl Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
F Warum muss ich ein SSL cert immer manuell hinzufügen? Java Basics - Anfänger-Themen 46
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
K Warum werden immer noch doppelte Zahlen ausgegeben ? Java Basics - Anfänger-Themen 13
J Componente immer in Front halten, wie? Java Basics - Anfänger-Themen 5
berserkerdq2 Brauche ich while != -1, wenn ich immer einen BufferedReader verwende? Java Basics - Anfänger-Themen 8
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
berserkerdq2 Spiel hängt sich immer in der 4 Runde auf, obwohl ich jede Runde das gleiche mache Java Basics - Anfänger-Themen 1
berserkerdq2 An selbst ersteller txt Datei immer Text dranhängen, ohne den vorherign Text zu löschen Java Basics - Anfänger-Themen 8
K In andere Zahlensysteme umwandeln, wann klappt immer der Trick mit log? Java Basics - Anfänger-Themen 6
F Wieso wird immer die falsche Mausposition angegeben? Java Basics - Anfänger-Themen 1
D Codeblöcke, die immer wieder im Programmverlauf benötigt werden Java Basics - Anfänger-Themen 5
chocobear26 Interface JOptionPane - Dialog_Fenster zeigt immer vorherige Eingabe an. Java Basics - Anfänger-Themen 4
C Objekt1.equals(Objekt2) = immer false. Wieso? Java Basics - Anfänger-Themen 22
I Array übernimmt immer den letzten Input. Java Basics - Anfänger-Themen 14
tom.j85 Doppelte Foreach Schleife: Am Ende wird immer das Gleiche Objekt eingefügt Java Basics - Anfänger-Themen 4
M Untersuchen ob ein Graph nach entfernen einer Kante immer noch zusammenhängend ist Java Basics - Anfänger-Themen 70
J Zweck von Interfaces immer noch nicht klar Java Basics - Anfänger-Themen 3
M Array immer wieder um ein Element erweitern Java Basics - Anfänger-Themen 6
CptK Methoden Event bei gedrückter Maustaste immer wieder ausführen Java Basics - Anfänger-Themen 1
CptK Klassen Event bei gedrückter Maus immer wieder mit Pause ausführen Java Basics - Anfänger-Themen 2
IMain23 2d Array variabler Spaltenwert, Spaltenwert immer um eins erhöhen Java Basics - Anfänger-Themen 3
M JTextField blitzt immer wieder nur auf Java Basics - Anfänger-Themen 12
N Arbeitsspeicher nach kompilieren immer voller Java Basics - Anfänger-Themen 6
S Immer das selbe mit den Schleifen Java Basics - Anfänger-Themen 24
H OOP eine Zahl immer weiter durch 2 teilen Java Basics - Anfänger-Themen 15
B Operatoren Java berechnet immer 0? Java Basics - Anfänger-Themen 3
J Timer bauen, Main Methode immer wieder neu starten Java Basics - Anfänger-Themen 13
N Funktion funktioniert nicht immer Java Basics - Anfänger-Themen 6
I Methoden Schleife immer wieder durchlaufen lassen Java Basics - Anfänger-Themen 15
3 JFrame immer im Hintergrund Java Basics - Anfänger-Themen 1
F Immer wieder gleiche Zufallszahl? Java Basics - Anfänger-Themen 4
J Operatoren Random wird nur einmal erstellt und dann immer verwendet Java Basics - Anfänger-Themen 2
S Repaint() in der Schleife funktioniert nicht immer Java Basics - Anfänger-Themen 5
S Variable in JTextField soll immer um 5 zunehmen Java Basics - Anfänger-Themen 8
schoenosrockos JButton füllt immer das ganze frame Java Basics - Anfänger-Themen 1
N JList + DefaultListModel + JScrollPane --> ensureIndexIsVisible funktioniert nicht immer Java Basics - Anfänger-Themen 1
N Immer Aktiv sein. Java Basics - Anfänger-Themen 8
D Array wird immer mir 100 für jeden Wert initialisiert? Java Basics - Anfänger-Themen 2
J Ergebnis immer 0 Java Basics - Anfänger-Themen 8
S If-Anweisunng ist IMMER true Java Basics - Anfänger-Themen 2
F Inhalt einer Variable auswerten, die sich immer wieder ändert Java Basics - Anfänger-Themen 1
S UserPref und Java Application klappt immer nicht. Java Basics - Anfänger-Themen 2
Ponychan95 Erste Schritte Switch fällt immer bis zum default durch Java Basics - Anfänger-Themen 4
F String immer weiter nach Bedarf vergrößern Java Basics - Anfänger-Themen 3
X Muss man das immer so schreiben o.O Java Basics - Anfänger-Themen 3
F Timer beendet nicht immer Java Basics - Anfänger-Themen 2
N Boolean Werte - immer "false" Java Basics - Anfänger-Themen 5
P JavaFX Textfelder geben immer null zurück Java Basics - Anfänger-Themen 8
M zufälliges Setzen von Schiffen in while klappt nicht immer Java Basics - Anfänger-Themen 3
S Random IDs immer 10-stellig? Wie? Java Basics - Anfänger-Themen 5
B Klassen Objekte werden immer überschrieben Java Basics - Anfänger-Themen 10
T Muss ein Parametertest immer eine eigene Testklasse sein? Java Basics - Anfänger-Themen 3
C JavaMail funktioniert nicht immer Java Basics - Anfänger-Themen 8
J .txt Datei "einlesen "und in String speichern ergibt immer NULL Java Basics - Anfänger-Themen 17
M Noch immer Probleme mit exec Java Basics - Anfänger-Themen 15
A Java Arrays immer um eins "vergrößern" Java Basics - Anfänger-Themen 4
E Input/Output Drucken am Mac immer gleiche Schriftgröße?!? Java Basics - Anfänger-Themen 2
R Hashset.add(Array) liefert immer true? Java Basics - Anfänger-Themen 23
I immer die gleiche Zufallszahl Java Basics - Anfänger-Themen 9
F Funktion immer zur vollen Stunde? Java Basics - Anfänger-Themen 3
A Warum immer das "J" im Klassennamen? Java Basics - Anfänger-Themen 10
M Erste Schritte Eclipse führt immer das gleiche Programm aus Java Basics - Anfänger-Themen 6
B Schlüsselworte this - immer oder nur wenn wirklich notwendig? Java Basics - Anfänger-Themen 9
A Wieso wird immer 0 ausgegeben? Java Basics - Anfänger-Themen 4
C 2 Objekte, 1 immer Null? Java Basics - Anfänger-Themen 8
P Classpath falscher Classpath, aber nicht immer Java Basics - Anfänger-Themen 19
E JButtons auf JFrame nicht immer sichtbar Java Basics - Anfänger-Themen 4
Helgon Observer Pattern - hasChanged() immer false Java Basics - Anfänger-Themen 10
P toString-Methode gibt immer null vor Variable aus Java Basics - Anfänger-Themen 9
L Immer diese Arrays Java Basics - Anfänger-Themen 11
M OOP Graphics immer selbstbezihend Java Basics - Anfänger-Themen 12
D . ist nicht immer .!? Java Basics - Anfänger-Themen 18
S Dezimale Konstanten sind immer positiv oder null - was heisst das den genau? Java Basics - Anfänger-Themen 2
L JTextField getText() gibt immer null zurück Java Basics - Anfänger-Themen 10
J \n funktioniert nicht immer Java Basics - Anfänger-Themen 10
L Woerterbuch liefert immer "null" Java Basics - Anfänger-Themen 41
J Datentypen Math.sqrt() immer NaN Java Basics - Anfänger-Themen 8
T Datei so speichern das sie immer erreichbar ist Java Basics - Anfänger-Themen 2
Os-Programming Checkbox immer wieder überprüfen Java Basics - Anfänger-Themen 13
ruutaiokwu final wenn immer möglich verwenden? Java Basics - Anfänger-Themen 30
E Input/Output Datei immer weiter erweitern Java Basics - Anfänger-Themen 4
D Muss ich eigentlich immer auf die Verwendung des richtigen Datentyps achten? Java Basics - Anfänger-Themen 7
B if erzeugt nur immer ein FALSE Java Basics - Anfänger-Themen 2
M Tabelle mit immer sortiertem Inhalt Java Basics - Anfänger-Themen 5
F Midi-Sequenzer gibt immer denselben, schrägen Ton aus? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen


Oben