Toon posts:

[JAVA] Hoe byte array uitlezen van DataInputStream?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo, ik verstuur een filmpje van een telefoon, naar een servlet. Op de servlet wordt deze data ingelezen als byte-array. Wanneer ik op de server een system.printout doe, krijg ik waarden als 0,0,0,112, -51, enz. (1e 10 waarden van de bytearray) Wanneer ik de bytearray vervolgens verstuur, via doGet van de servlet, kan ik ook op de browser nog deze bytearray zien. echter, wanneer ik op de 2e telefoon, die het filmpje moet gaan afspelen, de data weer wil uitlezen, krijg ik totaal andere waarden. Code op de telefoon:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
//      Set up a Connection
        try {
            HttpConnection connection = (HttpConnection) Connector
            .open("http://192.168.1.101:8080/mobitube/send");
            connection.setRequestProperty("Connection", "Keep-Alive");
            connection.setRequestProperty("Content-Language", "en-US");
            connection.setRequestMethod(HttpConnection.GET);
            // Get the content of the server and put it into dataInputStream
            dataInputStream = (DataInputStream) connection.openDataInputStream();
            // Create a temporary byte array
            String string = dataInputStream.readUTF();
            tempByteArray = string.getBytes();


Wanneer ik een printout doe van string, krijg ik hetzelfde te zien als in de browser, namelijk een rij getallen van zowel positieve als negatieve getallen.

Echter, na het omzetten van de string in een byte[], en ik lees weer de 1e 10 uit, krijg ik totaal andere waarden:

10
48
13
10
....

Wat gaat hier mis?

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 17:46

Robtimus

me Robtimus no like you

Als je ze verstuurt als byte array moet je ze ook inlezen als byte array. Gebruik dan ook read(byte[]), zeker als je weet hoe groot je array moet zijn. Anders moet je op een andere manier zorgen dat je alle bytes goed binnenkomen.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

Topicstarter
De grootte weet ik dus nog niet, maar dat is niet echt een probleem. Als ik dit doe :

tempByteArray = new byte[500000];
dataInputStream.read(tempByteArray);

Werkt het ook niet, want

System.err.println(tempByteArray[0]);
System.err.println(tempByteArray[1]);
System.err.println(tempByteArray[2]);

geven vrolijk waarden als 50,48, iig andere als wat er zou moeten komen!

  • paulh
  • Registratie: Juli 1999
  • Laatst online: 28-11 15:14
Waarom gebruik je een String om de data uit te poepen? Dan kan er van alles fout gaan door de characterset conversies. Je zal de outputstream of writer van het response object moeten gebruiken om de data te tonen.

[ZwareMetalen.com] - [Kom in aktie tegen de CO2 maffia]


Verwijderd

Topicstarter
paulh schreef op donderdag 11 januari 2007 @ 12:44:
Waarom gebruik je een String om de data uit te poepen? Dan kan er van alles fout gaan door de characterset conversies. Je zal de outputstream of writer van het response object moeten gebruiken om de data te tonen.
Ik wil die string ook helemaal niet gebruiken. Misschien verduidelijkt dit iets, de code van de Servlet:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
protected void doGet(HttpServletRequest httprequest, HttpServletResponse httpresponse) throws ServletException, IOException {
       
         httpresponse.setContentType("text/plain");
         
         PrintWriter out =httpresponse.getWriter();

         for(int i = 0; i < receivedStream.length;i++){
             out.print(receivedStream[i]);
         }
         
        
    }


Hierin is receivedStream de bytearray met de zojuist ontvangen gegevens. Die stuur ik toch op de goede manier weg nu? Hoe lees ik hem dan goed uit door vantuit de midlet de servlet aan te roepen?