Javaを使用してソケット経由で複数の画像を送信しようとしていますが、画像をバイト配列に変換して送信できるようにするための高速な方法が必要です。次のコードを試してみましたが、 C:\ドライブに約10,000枚の画像を保存しますが、ディスクに書き込まずにこの変換を行う方法はありますか?ありがとう!
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
//ImageIO.setUseCache(false);
ImageIO.write(bi.getImage(), "jpg", outputStream);
byte[] imageBytes = outputStream.toByteArray();
これはうまくいくはずです:
byte[] imageBytes = ((DataBufferByte) bufferedImage.getData().getDataBuffer()).getData();
以下のコードは本当に高速です(数ミリ秒)
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();
}
使用してみてください:
ImageIO.setUseCache(false);
書く前に、それが役立つかもしれません。
ByteArrayOutputStream baos;
ImageIO.write(bufferedImage, "png", baos);
byte[] imageBytes = baos.toByteArray();
BufferedImage img = ImageIO.read(new ByteArrayInputStream(bytes));
byte[] bytes = new byte[buf.capacity()];
buf.get(bytes, 0, bytes.length);