[Java] Lengte van een xml bericht in bytes vertalen

Pagina: 1
Acties:

  • Standeman
  • Registratie: November 2000
  • Laatst online: 18:08

Standeman

Prutser 1e klasse

Topicstarter
Ik heb een stom en waarschijnlijk simpel probleem, maar ik kom er niet uit. Ik wil via een SSL socket een XML bericht sturen naar een server.

Voordat het bericht verstuurd wordt, moet de omvang van het bericht in de eerste 4 bytes van het bericht geplaatst worden.

Dus, stel mijn bericht is 1034 bytes groot. In totaal zal het bericht dan met 4 bytes groeien dus 1038 karakters lang zijn. In hex is 1038 #040E

Het bericht komt er dan als volgt uit te zien:

Afbeeldingslocatie: http://www.nsolutions.nl/images/hex.gif

Ik zit alleen al de hele ochtend te prutsen om de lengte om te zetten naar de goede array van bytes en ik kan maar niet bedenken hoe ik het precies moet aanpakken.

Ik hoop dat er mensen zijn die mij op een idee kan helpen...

The ships hung in the sky in much the same way that bricks don’t.


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Daar zijn de *Streams van Java toch heel geschikt voor? Gewoon een PrintStream nemen en daar als eerste je integer+4 in stoppen?
Of denk ik nu te simpel en ben je dan niet zeker van eventuele boundaries en dergelijke.

Of is je probleem juist dat je de grootte niet weet vanwege multi-byte karakters enzo? :)

[edit]
Hmmnee, PrintStream doet String.valueOf(int)
[edit2]
Maar DataStream doet wat ik bedoelde.

[ Voor 16% gewijzigd door ACM op 20-11-2005 11:54 ]


  • Standeman
  • Registratie: November 2000
  • Laatst online: 18:08

Standeman

Prutser 1e klasse

Topicstarter
ACM schreef op zondag 20 november 2005 @ 11:47:
Daar zijn de *Streams van Java toch heel geschikt voor? Gewoon een PrintStream nemen en daar als eerste je integer+4 in stoppen?
Of denk ik nu te simpel en ben je dan niet zeker van eventuele boundaries en dergelijke.

Of is je probleem juist dat je de grootte niet weet vanwege multi-byte karakters enzo? :)

[edit]
Hmmnee, PrintStream doet String.valueOf(int)
[edit2]
Maar DataStream doet wat ik bedoelde.
Je hebt helemaal gelijk.. Ik zat denk ik met mijn neus te kijken ofzo.

Inmiddels twee methodes geschreven die het werk voor mij doen:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
    private static byte[] intToByteArray(final int integer) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(baos);
        dos.writeInt(integer);
        dos.flush();
        return baos.toByteArray();
    }
    
    private static int ByteArrayToInt(byte[] b) throws IOException {
        ByteArrayInputStream bos = new ByteArrayInputStream(b);
        DataInputStream dos = new DataInputStream(bos);
        return dos.readInt();
    }


Thankx voor de hint :*)

p.s. Het schijnt ook mogelijk te zijn bitwise operations, maar dat snap ik nog niet helemaal :/

[ Voor 4% gewijzigd door Standeman op 20-11-2005 14:08 ]

The ships hung in the sky in much the same way that bricks don’t.