2015-03-10 8 views
6

Próbuję serializować BufferedImage w Javie, ale działając mój program otrzymałem NotSerializableException.Dlaczego nie można serializować java.awt.image.BufferedImage?

Patrząc na klasę BufferedImage, zauważyłem, że nie implementuje ona Serializable.

Dlaczego BufferedImage nie wykonuje ?

+0

Jestem całkiem nie ma żadnych (lub bardzo mało co najmniej) klas BufferedXXX, które są serializowalne. – Falmarri

+0

Duplikat http://stackoverflow.com/questions/15058663/how-to-serialize-an-object-athe-includes-bufferedimages lub całkiem podobnie myślę. Ale byłoby ciekawie poznać powód, dla którego nie można go serializować. Myślę, że ponieważ zawiera dane rastrowe specyficzne dla archa i endian. –

+2

@Fabio Bohnenberger Spróbuj użyć 'int [] getRGB (....)' i serializuj zwróconą tablicę całkowitą zamiast obrazu, a gdy deserializujesz tablicę, spróbuj odtworzyć 'BufferedImage' używając metody' setRGB (. ...) ' –

Odpowiedz

4

Myślę, że właśnie odkryłeś brakującą funkcję.

  • Czy ma sens mieć BufferedImage implements Serializable? Moim zdaniem tak. Zwłaszcza jeśli BufferedImage nie został załadowany z pliku, ale został stworzony i narysowany. Ale nawet jeśli pochodzi z pliku, kogo to obchodzi skąd pochodzi, jeśli chcę go wymienić między VM poprzez RMI lub podobny?
  • Czy jest coś w numerze BufferedImage, które stanowi silny techniczny powód przeciwko BufferedImage implements Serializable? Przeglądałem kod źródłowy i nie sądzę.

Sprawdziłem, czy baza błędów zawiera już wpis, i nie mogłem znaleźć niczego powiązanego. Jest to więc Twoja szansa, aby wnieść swój wkład i zaproponować żądanie funkcji za pośrednictwem bazy danych błędów. http://bugs.java.com/bugdatabase/

Jako obejście, można zajrzeć do realizacji readObject() i writeObject() w klasie javax.swing.ImageIcon. ImageIcon to Serializable. Być może można zawinąć BufferedImage w przypadku ImageIcon w przypadku użycia lub w inny sposób zapewnić logikę z ImageIcon.readObject()/ImageIcon.writeObject().

+2

Rewizja. To oczywiście * nie * dotyczy 'javax.swing.ImageIcon. – EJP

+1

@ Jean-FrançoisSavard Dlaczego obraz nie powinien być" Serializable "? Co jest takiego specjalnego w obrazie w porównaniu do wszystkiego innego? –

+2

@ Jean-FrançoisSavard Obraz jest tylko plikiem, jeśli już posiadasz plik. Jeśli go nie masz i potrzebujesz go, musisz dostać to z innego miejsca. Obrazy niekoniecznie są plikami: mogą być generowane dynamicznie. To naprawdę nie ma żadnego sensu. – EJP

Powiązane problemy