2012-12-23 4 views
8

ich das gleiche Projekt mache, wie beschreiben hier:Wie rohe Byte Inhalt von einem Byte [] Array zu stdout in Java zu drucken?

Wrap deflated data in gzip format

Mein Problem ist, dass wenn ich versuche, Bytes zu drucken, ich seltsame Ergebnisse. Meine Probleme treten in dem folgenden Code (Sorry für meine schlechte Wahl von Variablen):

for(int k = 0; k < head.length; k++){ 
     System.out.write(head[k]); 
    } 

    for(int m = 0; m < a.size(); m++){ 
     int comprlength = a.get(m).getclength(); 
     for(int ii = 0; ii < comprlength; ii++){ 
      System.out.write(a.get(m).getcompr()[ii]); 
     } 
    } 
    for(int j = 0; j < f1.length; j++){ 
     System.out.write(f1[j]); 
    } 
    for(int ll = 0; ll < total_d.length; ll++){ 
     System.out.write(total_d[ll]); 
    } 

Die letzten zwei for-Schleifen aus dem Inhalt des ihrem Byte-Arrays wird nicht gedruckt. So bekomme ich einen unerwarteten Dateiende Fehler wenn ich gzip benutze. Das Seltsame ist, dass wenn ich den zweiten For-Loop-Block (den Block mit den Variablen m und ii) auskommentiere, nichts ausgedruckt wird.

Also wie drucke ich den Inhalt meiner Byte-Arrays richtig aus? Warum wird die erste for-Schleife korrekt ausgedruckt, wenn die zweite for-Schleife nicht kommentiert ist und warum wird nichts gedruckt, wenn diese zweite for-Schleife kommentiert ist?

EDIT:

Um genauer zu sein:

Ich mag das rohe Bytes schreiben. Und ich will, es zu tun, so dass es richtig ist, nach einander für jede meiner Bytefeldgruppen

+0

Wenn Sie System.out.write verwenden, müssen Sie möglicherweise den Ausgabestream leeren, indem Sie ein '\ n' Zeichen am Ende Ihres Codes schreiben. – codebox

Antwort

34

Ihre Byte-Array Angenommen genannt wird buf:

System.out.println(Arrays.toString(buf)); 

Edit: Es klingt wie das, was Sie Wollen Sie Ihre Bytes in stdout schreiben, nicht drucken. Siehe http://docs.oracle.com/javase/6/docs/api/java/io/PrintStream.html für den Unterschied zwischen dem Drucken zu einem Stream und dem Schreiben darauf. Der einfachste Weg sollte zu nennen sein, die write (byte [] b) Methode:

System.out.write(buf); 
+3

@BhavikAmbani: Bytes sind Zahlen, und ich sehe nicht, warum Sie Zahlen auf der Konsole nicht drucken konnten. Das ist das, was das oben genannte tut. –

+0

Aber ich möchte die rohen Bytes drucken – XCBaller

+0

Danke Mann. Ich war PrintStream kurz zuvor begegnet, als Sie es vorgeschlagen haben. Es druckt so, wie ich es möchte. Ich habe auch irgendwo anders in meinem Code einen Fehler gefunden, der das seltsame Verhalten verursacht hat. Danke noch einmal. – XCBaller

-1
/* There is an image/ic_launcher in the drawable folder for which I am making ByteArray */ 



    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.img); 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
    byte[] mByteArray = stream.toByteArray(); 

/* hier bin ich die Rohdaten nicht in Hexadezimal-Format zeigt */

System.out.println(Arrays.toString(mByteArray)); 

Ich denke, das wird euch helfen!