11

に変換するためのコード スニペットが必要DataHandlerですbyte[]

このデータ ハンドラには が含まれていますImage

4

5 に答える 5

29

apache IO Commons を使用して、あまり労力をかけずに以下のコードを使用することで実行できます。

final InputStream in = dataHandler.getInputStream();
byte[] byteArray=org.apache.commons.io.IOUtils.toByteArray(in);
于 2011-01-13T11:17:51.337 に答える
13

次のように実行できます。

public static byte[] toBytes(DataHandler handler) throws IOException {
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    handler.writeTo(output);
    return output.toByteArray();
}
于 2012-04-20T14:50:46.790 に答える
4
private static final int INITIAL_SIZE = 1024 * 1024;
private static final int BUFFER_SIZE = 1024;

public static byte[] toBytes(DataHandler dh) throws IOException {
    ByteArrayOutputStream bos = new ByteArrayOutputStream(INITIAL_SIZE);
    InputStream in = dh.getInputStream();
    byte[] buffer = new byte[BUFFER_SIZE];
    int bytesRead;
    while ( (bytesRead = in.read(buffer)) >= 0 ) {
        bos.write(buffer, 0, bytesRead);
    }
    return bos.toByteArray();
}

ByteArrayOutputStream.toByteArray() が内部バイト配列のコピーを作成することに注意してください。

于 2011-01-12T17:28:32.877 に答える
0

このようなものはあなたが探しているものですか?

public static byte[] getBytesFromDataHandler(final DataHandler data) throws IOException {
    final InputStream in = data.getInputStream();
    byte out[] = new byte[0];
    if(in != null) {
        out = new byte[in.available()];
        in.read(out);
    } 
    return out;
}

アップデート:

dkarp のコメントに基づくと、これは正しくありません。のドキュメントによるとInputStream

この入力ストリームのメソッドの次の呼び出し元によってブロックされることなく、この入力ストリームから読み取る (またはスキップする) ことができるバイト数を返します。次の呼び出し元は、同じスレッドまたは別のスレッドである可能性があります。

コスティはここで正しい答えを持っているようです。

于 2011-01-12T17:21:14.413 に答える