Zurückkehrend ein GIF-Bild von einem Verfahren
Frage
ich eine Anwendung in Java bin zu schaffen, die der Teil einer externen Anwendung sein werden. Meine Anwendung enthält ein Ansichtsfenster, die einige Polygone und Sachen wie das zeigt. Die externe Anwendung muss das Bild des Ansichtsfensters im GIF-Format bekommen. Für dass sie ein Verfahren in einer Schnittstelle aufrufen (durch meine Anwendung implementiert) und meine Anwendung gibt das Bild. Die externe Anwendung muss das Bild in der Datenbank speichern (oder etwas mit sich bringen, die ich nicht brauchen, um sich Sorgen zu machen).
Meine Frage ist: - Was die Datencontainer Typ des Bildes sein sollte, wenn meine Bewerbung an die externe Anwendung senden? Ich meine, was sollte der Rückgabetyp der Methode sein? Derzeit gibt meine GIF-Encoder-Klasse einen Byte-Array. Gibt es eine andere 'besser' Option?
Lösung
Ein Byte-Array geeignet sein könnte, wenn man die GIFs erwarten, klein zu sein, aber Sie könnten mit einem OutputStream
betrachten, so dass Sie Bits effizienten streamen können.
Auch wenn man heute nur einen voll besiedelten ByteArrayOutputStream
zurückkehrt, würde dies ermöglicht es Ihnen, Ihre Implementierung in Zukunft zu ändern, ohne cilent Code zu beeinflussen.
Andere Tipps
Eine intuitivere Rückgabetyp sein könnte java.awt.Image.
Hier sind einige Beispiele: http://www.google.com/codesearch? q = java + gif + Bild & hl = en & BTNG = Suchen +-Code
Wenn Sie Ihre ‚Anwendung‘ ist eigentlich eine Java-Methode aufgerufen wird, dann sollte es Java-Rückgabetypen verstehen und Sie sollten java.awt.image zurück.
Wenn Sie dies durch eine Art von Remote Procedure tun, die Java-Typen nicht verstehen kann, ich würde einen Byte-Array zurückgeben und lassen Sie den Empfang App es dekodieren.
Ich würde erstellen zwei Methoden:
- Erste Methode erstellt das Bild und gibt einen
java.awt.Image
. Hier können Sie die Zeichnung Teil Ihrer Methode setzen. - Die zweite Methode erstellt eine GIF-Darstellung der
java.awt.Image
wie durch die externe Anwendung angefordert. Es sollteOutputStream
zurück, wie bereits vorgeschlagen.