Переопределив метод toByteArray()
, возвращая сам buf
(не копируя), вы можете избежать проблем, связанных с памятью. Это разделит тот же массив, не создавая другой с правильным размером. Важно использовать метод size()
для контроля количества действительных байтов в массиве.
final ByteArrayOutputStream output = new ByteArrayOutputStream() {
@Override
public synchronized byte[] toByteArray() {
return this.buf;
}
};
ImageIO.write(image, "png", output);
return new ByteArrayInputStream(output.toByteArray(), 0, output.size());