Was macht dieser Code?

Status
Nicht offen für weitere Antworten.

jollyroger

Bekanntes Mitglied
Hi,

und sorry für das Thema, aber was Besseres ist mir echt nicht eingefallen.

Ich bin gerade auf eine Funktion eines Kollegen von mir gestoßen, der leider gerade im Urlaub ist.

Die Funktion schreibt einen String in eine AMQ / JMS-Bytemessage und sieht so aus:


Code:
	private void writeString(BytesMessage message, String s) throws JMSException  {
      
		int strlen = s.length();
		
	    if (strlen<128) {
	         message.writeByte((byte)strlen);
	    }
	    else {
	    	message.writeInt(strlen|0x80000000);
	    }
	    for (int i = 0; i < strlen; i++) {
	         message.writeByte((byte)(s.charAt(i)));
	    }
   }

Ok, offensichtlich enthält der Anfang der Bytemessage die Länge der gesamten Payload.

Aber was macht denn

Code:
message.writeInt(strlen|0x80000000);

"strlen" wird "Oder" verknüft mit dem Hex-Wert 0x80000000, das seh ich richtig, oder?

Nur wieso?
 

Marco13

Top Contributor
Wieso? Die Intention wird man wohl kaum nachvollziehen können. Vielleicht hilft die Information, dass (wenn ich mich nicht gerade schwer irre) dadurch strlen schlicht und einfach negativ gemacht wird.... (das erste Bit steht für's Vorzeichen)
 
S

SlaterB

Gast
weil dann ein anderer Wert rauskommt und dieser anscheinend erwartet wird
aufgrund anderer Bit-Zahldarstellung oder ähnliches


edit:
also schlicht negativ ist es nicht ganz:

Code:
public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        int s = 4;
        System.out.println(Integer.toBinaryString(s));
        s = 4|0x80000000;
        System.out.println(Integer.toBinaryString(s));
        s = -4;
        System.out.println(Integer.toBinaryString(s));
    }
}


-------

100
10000000000000000000000000000100
11111111111111111111111111111100
 

0x7F800000

Top Contributor
es wird schon negativ, aber ändert sich gewaltig betragsmäßig, n dürfte zu -(2^31-n) werden, so auf +-1 genau... :bahnhof:
 

jollyroger

Bekanntes Mitglied
Hey ho,

vielen Dank für die Antworten.

Ich seh schon, mein Kollege hat entweder Mist gebaut oder der tiefere Sinn bleibt mir verborgen....
 
S

SlaterB

Gast
wahrscheinlich meckert die Gegenseite auch zum Himmel, warum der jollyroger das bloß so kompliziert schickt ;)
 
Z

Zetagi

Gast
Hi,

"Mist" hat dein Kollege sicherlich nicht gebaut. Er hätte es nur kommentieren sollen.

Für mich sieht es wie ein Vorrendner erwähnte nach einer anderen Zahlendarstellung aus. In einem Byte befinden sich 8Bit. Damit lassen sich 256 Zahlen darstellen.

Je nach Zahlendarstellung (nur positive Zahlen) wären das 0-255.
Wenn auch negative zahlen dargestellt werden können, wäre das der Bereich -127 <-> 128

Daher die Abfrage: wenn < 128 OK SONST ändere Darstellung....

Aber wenn dein Kollege dir erkärt hat wozu der Code dient, erleuchte bitte auch das Forum mit der Erklärung ;-)
 
G

Guest

Gast
Weisst du wie die Gegenstelle das ausliest?

Wenn ich mich die nächsten 3 - 4 Stunden durch nicht dokumentierten C-Code wühle, ja.... :wink:

"Mist" hat dein Kollege sicherlich nicht gebaut. Er hätte es nur kommentieren sollen.

Amen ..... :wink:

Aber wenn dein Kollege dir erkärt hat wozu der Code dient, erleuchte bitte auch das Forum mit der Erklärung

Mach ich auf jeden Fall.
 
M

maki

Gast
Wenn ich mich die nächsten 3 - 4 Stunden durch nicht dokumentierten C-Code wühle, ja.... icon_wink.gif
Das ist ja schonmal sehr interessant.

Könnte mir vorstellen, dass die Gegenstelle prüft, ob die Zahl negativ ist und damit über 128, oder positiv und damit kleiner als 128.
 
G

Gast12

Gast
offensichtlich hat die gegenstelle probleme, wenn der "header" einer message (die länge) mit 0 beginnt. denn genau das kann passieren, wenn writeInt() aufgerufen wird. das schiebt 4 bytes in den strom, high to low bytes. durch die veroderung beginnt der header immer mit einer 1, an der bit darstellung ändert sich bis auf das höchstwertigste bit allerdings nichts, da die zahlen garantiert positiv sind.
 
G

Gast12

Gast
äh, nicht "immer mit einer 1", sondern immer mit "nicht 0", so wars gemeint ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Jemand einen Tipp wie man ein Javafx-Hintergrund "dynamisch" macht Allgemeine Java-Themen 3
N Division macht Probleme Allgemeine Java-Themen 14
berserkerdq2 IJVM, ich tue auf meinen Stack 100 und 120 rein, danach subtrahiere ich, macht die Maschine 100-120 oder 120-100? Allgemeine Java-Themen 8
OnDemand Anzeigen was eine Applikation macht Allgemeine Java-Themen 1
H Swing HashMap zu Tabelle macht mir Probleme Allgemeine Java-Themen 4
M 4 Gewinnt KI macht nicht, was sie soll.. Allgemeine Java-Themen 1
P Eclipse Projekt anlegen macht Problem Allgemeine Java-Themen 1
WetWer Was bedeutet/macht ein Exit-Code Allgemeine Java-Themen 1
O OOP Wie macht man das am besten OO? Allgemeine Java-Themen 8
Thallius Macht das Sinn? Allgemeine Java-Themen 30
F Java Native/Shared Library (.so) laden macht Probleme Allgemeine Java-Themen 3
X Was macht folgender Code!? Allgemeine Java-Themen 6
J Doppelte Buchstaben löschen - letztes Wort macht er nicht Allgemeine Java-Themen 2
J if else Anweisung macht nicht was es soll. Wieso? Allgemeine Java-Themen 10
M Google App Engine macht Probleme Allgemeine Java-Themen 4
GilbertGrape Warum macht man "if(true)" Allgemeine Java-Themen 18
C Klassen Was macht diese Java-Mathe-Klasse? Allgemeine Java-Themen 2
S Erste Schritte Exception beendet Schleife nicht - Methode macht trotz throw weiter? Allgemeine Java-Themen 9
S Javadoc 3d einbinden macht probleme Allgemeine Java-Themen 10
B Unix-Timestamp > Date macht Probleme. Allgemeine Java-Themen 3
T Ausdruck mit pdfBox macht Probleme Allgemeine Java-Themen 2
B jar File macht probleme wegen einer Methode! Allgemeine Java-Themen 5
alderwaran jaxb xsd schema, min/maxoccurs macht was? Allgemeine Java-Themen 7
S AWT StringBuffer macht nicht, was ich erwarte Allgemeine Java-Themen 2
E Timer class macht einfach garnichts :/ Allgemeine Java-Themen 6
G Vokabelprogramm - Wer macht mit? Allgemeine Java-Themen 58
S Anschauen was der Compiler macht..? Allgemeine Java-Themen 5
bj99 ImageIO.write() macht Probleme Allgemeine Java-Themen 7
I Was macht static { ... } ? Allgemeine Java-Themen 8
N Für welche Art von Berechnungen macht JCUDA Sinn? Allgemeine Java-Themen 12
P JMF macht mich verrückt Allgemeine Java-Themen 3
R PDF Formular mit JPod ausfüllen macht Probleme Allgemeine Java-Themen 4
G Wie kriegt Klasse2 die Info, was Klassse1 gerade "macht Allgemeine Java-Themen 7
Escorter was macht createHorizontalGlue() Allgemeine Java-Themen 2
T Serialisierung: Wie macht RMI das so schnell? Allgemeine Java-Themen 14
S Was macht der Java-Verifier? Allgemeine Java-Themen 4
T Problem, warum macht der das so(finde kein titel.) Allgemeine Java-Themen 3
I Irre Website-Wie macht man sowas? Allgemeine Java-Themen 6
U if Abfrage macht etwas falsch Allgemeine Java-Themen 2
G javadoc macht probleme Allgemeine Java-Themen 2
A equals() macht nicht, was es soll Allgemeine Java-Themen 4
B Vergleichen von arrays macht Probleme Allgemeine Java-Themen 2
M JBoss macht Probleme Allgemeine Java-Themen 6
P Wie macht Sun Gewinn mit Java? Allgemeine Java-Themen 3
Maximum '.' in String ersetzen macht Schwierigkeiten Allgemeine Java-Themen 2
T Klassen samt Methoden aus Jar-Archiv laden macht Problem Allgemeine Java-Themen 9
Drachenbauer Was bedeutet dieser Zahlwert? Allgemeine Java-Themen 4
Thallius Warum ist dieser Code OS abhängig? Allgemeine Java-Themen 10
R Was los mit dieser Aufgabe? Arrays mit Schachbrettmustern? Allgemeine Java-Themen 10
R Was führt dieser Code aus Allgemeine Java-Themen 3
T Ist dieser Code sicher gegen concurrent modifications? Allgemeine Java-Themen 6
S Frage zu dieser Quicksort Variante Allgemeine Java-Themen 2
W Wieso funktioniert dieser Code hier? Allgemeine Java-Themen 6
S Was bedeutet dieser Zeichen Allgemeine Java-Themen 4
H Wie schön oder unschön ist dieser code - alternative ? Allgemeine Java-Themen 5
T Was bedeutet dieser Fehler? Allgemeine Java-Themen 7
B Absolute Paf einer Klasse in dieser dynamisch auslesen? Allgemeine Java-Themen 5
B Wie heißt dieser kleine Typ links oben? Also dieses JavaVieh Allgemeine Java-Themen 5
Zrebna Tipps für Organisation von Code-Reviews nach einem Pull Request. Allgemeine Java-Themen 5
M Unsicher, ob das Code richtig ist Allgemeine Java-Themen 4
MarvinsDepression Unbekanntes Zeichen in fremden Code wirft Fragen auf Allgemeine Java-Themen 4
schemil053 Methoden Code-Verbesserung Allgemeine Java-Themen 2
D Webarchive (war): Code verschleiern Allgemeine Java-Themen 7
D Compiler-Fehler child process exited with code 1 Allgemeine Java-Themen 1
Queenman Interface Mein Microsoft Visual Studio Code zeigt komische Dinge & Menüs an Allgemeine Java-Themen 9
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
berserkerdq2 Versteht jemand, was diese beiden Zahlen bei dem IJVM Code zu bedeuten haben? Allgemeine Java-Themen 10
OnDemand Releaseversion Tag in Code Allgemeine Java-Themen 5
ERlK JDA Code funktioniert nicht? Allgemeine Java-Themen 4
F Code auslagern Allgemeine Java-Themen 5
D VBA Code mit Java ausführen möglich? Allgemeine Java-Themen 10
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
JordenJost Unverständlicher Java code? Allgemeine Java-Themen 21
V Hilfe mit Java Code Allgemeine Java-Themen 4
S Processing Java Code verstehen Allgemeine Java-Themen 4
A code wird nicht ausgeführt Allgemeine Java-Themen 3
B Bitte um Code Erklärung Allgemeine Java-Themen 5
N nicht einsehbarer Fehler im code, kann nicht mehr übersetzten Allgemeine Java-Themen 51
N Regulären Ausdruck in normalen Java-Code umwandeln Allgemeine Java-Themen 12
OnDemand Clean Code oder Allgemeine Java-Themen 5
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
J Simple Date Format Alternativen bitte um Code Allgemeine Java-Themen 14
AGW in Java-Code plötzlich ein paar Wörter in Rot Allgemeine Java-Themen 2
L Best Practice Auslagerung von Code = Performance Optimierung? Allgemeine Java-Themen 4
H Precompilierten code ansehen Allgemeine Java-Themen 3
R Wo müsste ich im Code eine Änderung vornehmen? Allgemeine Java-Themen 6
L Ausgabe von in Echtzeit ausgeführten Code Allgemeine Java-Themen 9
Drachenbauer Wie kann ich die menge an code reduzieren? Allgemeine Java-Themen 28
S Code Erklärung Allgemeine Java-Themen 21
B Pausem im Code Allgemeine Java-Themen 2
T Java-Quiz Code Fehler Allgemeine Java-Themen 10
L Eclipse Java Code ausführen Allgemeine Java-Themen 18
F Java Code ausführen direkt nach Anmelden in Windows Allgemeine Java-Themen 2
F Code in Klassen bringen Allgemeine Java-Themen 4
S Gibt es eigentlich Java Source Code Interpreter..? Allgemeine Java-Themen 13
J JUnit - Auslassen von Code Allgemeine Java-Themen 25
F Klassen Spaghetti Code Vermeidung Allgemeine Java-Themen 16
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
J Code Page characters darstellen Allgemeine Java-Themen 12
J wie sollte man sinnvoll seinen Code aufteilen Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben