2012-12-23 9 views
8

robie tego samego projektu, jak opisano tutaj:Jak wydrukować zawartość bajtów surowych z tablicy bajtów [] na stdout w Javie?

Wrap deflated data in gzip format

Moim problemem jest to, że gdy próbuję wydrukować bajtów, mam dziwne wyniki. Moje problemy występują w następujący kod (Przepraszam za mój zły wybór zmiennych):

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]); 
    } 

Dwa ostatnie for-pętle nie wydrukować treści swoich tablic bajtowych. W ten sposób uzyskuję nieoczekiwany koniec błędu pliku podczas korzystania z gzip. Dziwne jest to, że jeśli skomentuję drugi blok for-loop (blok ze zmiennymi m i ii), nic nie zostanie wydrukowane.

Jak poprawnie wydrukować zawartość macierzy bajtowych? Dlaczego pierwsza fraza w pętli for jest prawidłowo drukowana, gdy druga pętla for nie jest komentowana i dlaczego nie drukuje niczego, jeśli ta druga pętla for jest skomentowana?

EDIT:

Aby być bardziej konkretne:

chcę pisać surowe bajty. I chcę to zrobić tak, że tuż po siebie za każdego z moich tablic bajtowych

+0

Jeśli użyjesz System.out.write, będziesz musiał opróżnić strumień wyjściowy, pisząc znak "\ n" na końcu kodu. – codebox

Odpowiedz

34

Zakładając swoją tablicę bajtów nazywa buf:

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

Edit: Brzmi jak to, czego naprawdę chcesz zrobić, to zapisać swoje bajty na standardowe wyjście, a nie je wydrukować. Zobacz http://docs.oracle.com/javase/6/docs/api/java/io/PrintStream.html dla różnicy między drukowaniem do strumienia a pisaniem do niego. Najprostszym sposobem powinno być wywołać write (byte [] b) metoda:

System.out.write(buf); 
+3

@BhavikAmbani: bajty są liczbami i nie rozumiem, dlaczego nie można wydrukować liczb na konsoli. Tak właśnie jest. –

+0

Ale chcę wydrukować surowe bajty – XCBaller

+0

Dzięki człowieku. Natrafiłem na PrintStream krótko przed tym, jak to zasugerowałeś. Wydrukuje się tak, jak chcę. Znalazłem również błąd w innym miejscu kodu, który powodował dziwne zachowanie. Dzięki jeszcze raz. – 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(); 

/* tutaj przytaczam surowe dane nie w formacie szesnastkowym */

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

myślę to ci pomoże!

Powiązane problemy