java.io.IOException: Stream geschlossen

8

Für den Abruf mehrerer Bilder rufe ich ein PhotoHelperServlet mit einem Anchor-Tag auf, um imageNames (mehrere Bilder) wie folgt zu erhalten:

PhotoHelperServlet , um Namen von Images

zu erhalten %Vor%

In ImageDAO listNames () -Methode:

%Vor%

Im JSP-Code:

%Vor%

In PhotoServlet doGet () -Methode, um ein Foto zu erhalten:

%Vor%

In ImageDAO getPhotos () Methode

%Vor%

In web.xml

%Vor%

Frage:

Ich bekomme folgende Ausnahme:

%Vor%

in dieser Zeile:

%Vor%

Die vollständige Ausnahme:

%Vor%     
a k 19.06.2011, 05:19
quelle

3 Antworten

7

Ich würde mir vorstellen, dass der grundlegende Code-Ablauf wie folgt aufgebaut ist:

%Vor%

Und dass das Schließen von ResultSet das InputStream implizit geschlossen hat. Es sieht so aus, dass Ihr JDBC-Treiber die InputStream der ResultSet nicht vollständig im Speicher oder auf dem temporären Speicher speichert, wenn% code_% geschlossen ist. Vielleicht ist der JDBC-Treiber ein wenig vereinfacht oder nicht gut durchdacht, oder das Bild ist zu groß, um im Speicher gespeichert zu werden. Wer weiß.

Ich würde zunächst herausfinden, welche JDBC-Treiber-Impl / Version Sie verwenden, und dann in der Entwicklerdokumentation nachsehen, welche Einstellungen dieses Verhalten möglicherweise ändern / beheben können. Wenn Sie es immer noch nicht herausfinden können, müssen Sie den grundlegenden Codeablauf wie folgt neu anordnen:

%Vor%

Oder

%Vor%

Der erste Ansatz ist der effizienteste, nur der Code ist ungeschickt. Der zweite Ansatz ist speicherineffektiv, wenn Sie in ResultSet kopieren, oder die Leistung ist ineffizient, wenn Sie in ByteArrayOutputStream kopieren. Wenn die Bilder meist klein sind und ein Megabyte oder etwas anderes nicht überschreiten, dann kopiere ich einfach nach FileOutputStream .

%Vor%     
BalusC 20.06.2011, 13:12
quelle
1
%Vor%     
andro_stackoverflow 16.04.2012 05:50
quelle
0

Es sieht so aus, als ob das Problem tatsächlich nicht in dem von Ihnen geposteten Code liegt. Aus irgendeinem Grund ist der Stream input geschlossen. Sie schließen den Stream wahrscheinlich in image.getPhoto()

    
M Platvoet 19.06.2011 07:41
quelle

Tags und Links