Переопределив метод 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());