2012-12-23 32 views
8

Tôi đang làm dự án tương tự như mô tả ở đây:Làm thế nào để in nội dung byte thô từ một mảng byte [] thành stdout trong Java?

Wrap deflated data in gzip format

Vấn đề của tôi là khi tôi cố gắng để in ra byte, tôi nhận được kết quả kỳ lạ. vấn đề của tôi xảy ra trong đoạn mã sau (Xin lỗi cho sự lựa chọn xấu của tôi của các biến):

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

cuối cùng hai cho-vòng không in ra nội dung của các mảng byte của họ. Vì vậy, tôi nhận được một kết thúc bất ngờ của lỗi tập tin khi sử dụng gzip. Điều kỳ lạ là nếu tôi nhận xét khối thứ hai cho vòng lặp (khối với các biến m và ii), không có gì được in ra.

Vậy làm cách nào để in chính xác nội dung của các mảng byte của tôi? Tại sao vòng lặp đầu tiên in ra đúng khi vòng lặp thứ hai không được nhận xét và tại sao nó không in bất cứ thứ gì nếu vòng lặp thứ hai đó được nhận xét?

EDIT:

Để cụ thể hơn:

Tôi muốn viết ra các byte thô. Và tôi muốn làm điều đó để nó là ngay sau khi nhau cho mỗi một trong những mảng byte của tôi

+0

Nếu bạn sử dụng System.out.write, bạn có thể cần xóa luồng đầu ra bằng cách viết ký tự '\ n' ở cuối mã của bạn. – codebox

Trả lời

34

Giả sử mảng byte của bạn được gọi buf:

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

Edit: Nghe có vẻ giống như những gì bạn thực sự muốn làm là viết byte của bạn để stdout, không in chúng. Xem http://docs.oracle.com/javase/6/docs/api/java/io/PrintStream.html để biết sự khác biệt giữa việc in với luồng và ghi vào đó. Cách đơn giản nhất nên gọi write (byte [] b) Phương pháp:

System.out.write(buf); 
+3

@BhavikAmbani: byte là số và tôi không thấy lý do bạn không thể in số trên bảng điều khiển. Đó là những gì ở trên. –

+0

Nhưng tôi muốn in các byte thô – XCBaller

+0

Cảm ơn người đàn ông. Tôi đã gặp PrintStream ngay trước khi bạn đề xuất nó. Nó in ra cách tôi muốn. Tôi cũng tìm thấy một lỗi ở một nơi khác trong mã của tôi đã gây ra hành vi kỳ lạ. Cảm ơn một lần nữa. – 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(); 

/* ở đây tôi thấy các dữ liệu thô không ở định dạng thập lục phân */

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

Tôi nghĩ điều này sẽ giúp các bạn!

Các vấn đề liên quan