26

Javaを使用してソケットを介して複数の画像を送信しようとしていますが、画像をバイト配列に変換して送信できるようにするためのより高速な方法が必要です。次のコードを試しましたが、C:\ドライブに約10,000枚の画像が書き込まれました。ディスクに書き込まずにこの変換を行う方法はありますか?ありがとう!

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

                    //ImageIO.setUseCache(false);
                    ImageIO.write(bi.getImage(), "jpg", outputStream);

                    byte[] imageBytes = outputStream.toByteArray();
4

6 に答える 6

52

これは機能するはずです:

byte[] imageBytes = ((DataBufferByte) bufferedImage.getData().getDataBuffer()).getData();
于 2012-04-20T13:26:24.860 に答える
5

その下のコードは本当に速いです(数ミリ秒)

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public byte[] toByteArray(BufferedImage image) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();            
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(baos);
    encoder.encode(image);            
    return baos.toByteArray();
}
于 2016-04-07T14:46:51.170 に答える
4
ByteArrayOutputStream baos;
ImageIO.write(bufferedImage, "png", baos);
byte[] imageBytes = baos.toByteArray();
于 2018-07-20T04:13:06.983 に答える
2

使用してみてください:

ImageIO.setUseCache(false);

書く前に、多分それは助けになります。

于 2012-04-20T13:28:29.163 に答える
1
BufferedImage img = ImageIO.read(new ByteArrayInputStream(bytes));
byte[] bytes = new byte[buf.capacity()];
buf.get(bytes, 0, bytes.length);
于 2012-04-20T13:28:44.537 に答える
0

Apache Commons IO UtilsApacheCommonsを使用する

IOUtils.copy(inputStream、outputStream);

IO Utils APIは、大きなバッファーを簡単にサポートします

于 2012-04-20T13:26:52.243 に答える