14

ここで説明するのと同じプロジェクトを行っています:

圧縮されたデータを 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]);
    }

最後の 2 つの for ループは、バイト配列の内容を出力しません。したがって、gzip を使用すると、予期しないファイルの終わりエラーが発生します。奇妙なことに、2 番目の for ループ ブロック (変数 m と ii を持つブロック) をコメント アウトすると、何も出力されません。

では、バイト配列の内容を正しく出力するにはどうすればよいでしょうか? 2 番目の for ループがコメント化されていない場合に最初の for ループが正しく出力されるのはなぜですか? また、2 番目の for ループがコメント化されている場合に何も出力されないのはなぜですか?

編集:

もう少し詳しく言うと:

生のバイトを書き出したい。そして、バイト配列ごとに次々と配置されるようにしたい

4

2 に答える 2

53

バイト配列がbufと呼ばれると仮定します。

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

編集:あなたが本当にやりたいことは、バイトを印刷するのではなく、標準出力に書き込むことのようです。ストリームへの出力とストリームへの書き込みの違いについては、http://docs.oracle.com/javase/6/docs/api/java/io/PrintStream.htmlを参照してください。最も簡単な方法は、 write(byte[] b) メソッドを呼び出すことです。

System.out.write(buf);
于 2012-12-23T08:45:21.247 に答える
-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();

/* ここでは、16 進数形式ではない生データを表示しています */

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

これは皆さんの助けになると思います!

于 2015-01-19T06:34:32.300 に答える