に変換するためのコード スニペットが必要DataHandler
ですbyte[]
。
このデータ ハンドラには が含まれていますImage
。
に変換するためのコード スニペットが必要DataHandler
ですbyte[]
。
このデータ ハンドラには が含まれていますImage
。
apache IO Commons を使用して、あまり労力をかけずに以下のコードを使用することで実行できます。
final InputStream in = dataHandler.getInputStream();
byte[] byteArray=org.apache.commons.io.IOUtils.toByteArray(in);
次のように実行できます。
public static byte[] toBytes(DataHandler handler) throws IOException {
ByteArrayOutputStream output = new ByteArrayOutputStream();
handler.writeTo(output);
return output.toByteArray();
}
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() が内部バイト配列のコピーを作成することに注意してください。
このようなものはあなたが探しているものですか?
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
:
この入力ストリームのメソッドの次の呼び出し元によってブロックされることなく、この入力ストリームから読み取る (またはスキップする) ことができるバイト数を返します。次の呼び出し元は、同じスレッドまたは別のスレッドである可能性があります。
コスティはここで正しい答えを持っているようです。