如何在Java中将原始字节内容从byte[]数组打印到stdout?

2022-09-03 08:39:56

我正在做与此处描述相同的项目:

以 gzip 格式包装放气的数据

我的问题是,当我尝试打印出字节时,我得到奇怪的结果。我的问题出现在以下代码中(抱歉我错误地选择了变量):

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

最后两个 for 循环不打印出其字节数组的内容。因此,在使用gzip时,我得到了一个意外的文件错误结束。奇怪的是,如果我注释掉第二个for循环块(带有变量m和ii的块),则不会打印出任何内容。

那么,如何正确打印出字节数组的内容呢?为什么第一个 for 循环在没有注释时正确打印出来,如果第二个 for 循环被注释,为什么它不打印任何内容?

编辑:

更具体地说:

我想写出原始字节。我想这样做,以便它紧跟在我的每个字节数组之后


答案 1

假设您的字节数组称为 buf

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

编辑:听起来你真正想做的是将字节写入stdout,而不是打印它们。请参阅 http://docs.oracle.com/javase/6/docs/api/java/io/PrintStream.html,了解打印到流和写入流之间的区别。最简单的方法应该是调用 write(byte[] b) 方法:

System.out.write(buf);

答案 2
 /* 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();

/* 在这里,我显示的原始数据不是十六进制格式 */

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

我想这会对你们有所帮助!


推荐