2012-03-21 3 views
1

Я хочу преобразовать объект InputStream, представляющий файл изображения в объект BufferedImage, и после выполнения некоторых операций над BufferedImage преобразовать его обратно в InputStream, чтобы его можно было записать на диск. Я не хочу сначала создайте объект на диске, чтобы предотвратить дополнительные накладные расходы ввода-вывода.Преобразование между InputStream и BufferedImage

Я думаю, что я могу сделать следующее, чтобы преобразовать BufferedImage в InputStream

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
ImageIO.write(image,fileExtension, outputStream); 
InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray()); 

Является ли это правильно?. Кроме того, у меня есть следующие два вопроса

  1. Как получить объект BufferedImage из объекта InputStream
  2. Могу ли я получить размер файла непосредственно из объекта InputStream?

Некоторые примеры действительно поможет

Спасибо

+1

«преобразовать его обратно в InputStream, так что его можно записать на диск» почему вы хотите, чтобы преобразовать его в InputStream, если вы хотите записать его на диск? – Puce

ответ

1
  1. Посмотрите на read(InputStream stream) метод ImageIO
  2. Нет, вы можете заглянуть с помощью available(), но это не гарантирует размер потока (он работает для FileInputStream)
  3. Вы не можете записать во входной поток (как указано в его названии, это вход, не выход). Для того, чтобы написать, вам нужен OutputStream, и вы можете использовать write(RenderedImage im, String formatName, OutputStream output) из ImageIO
Смежные вопросы