Je suis en train de publier un gros fichier vidéo/image du système de fichiers local à un chemin http, mais je lance dans une erreur de dépassement de mémoire après un certain temps ...OutputStream OutOfMemoryError lors de l'envoi HTTP
ici est le code
public boolean publishFile(URI publishTo, String localPath) throws Exception {
InputStream istream = null;
OutputStream ostream = null;
boolean isPublishSuccess = false;
URL url = makeURL(publishTo.getHost(), this.port, publishTo.getPath());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
if (conn != null) {
try {
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("PUT");
istream = new FileInputStream(localPath);
ostream = conn.getOutputStream();
int n;
byte[] buf = new byte[4096];
while ((n = istream.read(buf, 0, buf.length)) > 0) {
ostream.write(buf, 0, n); //<--- ERROR happens on this line.......???
}
int rc = conn.getResponseCode();
if (rc == 201) {
isPublishSuccess = true;
}
} catch (Exception ex) {
log.error(ex);
} finally {
if (ostream != null) {
ostream.close();
}
if (istream != null) {
istream.close();
}
}
}
return isPublishSuccess;
}
VOICI l'erreur que je reçois ...
Exception in thread "Thread-8773" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2786)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
at sun.net.www.http.PosterOutputStream.write(PosterOutputStream.java:61)
at com.test.HTTPClient.publishFile(HTTPClient.java:110)
at com.test.HttpFileTransport.put(HttpFileTransport.java:97)
Certains (y compris moi) considèrent qu'il est impoli de crosspost: http://forums.sun.com/thread.jspa?threadID=5424210 Surtout quand vous ne mentionnez même pas le fait. –
S'il vous plaît ne vous offusquez pas à l'édition où j'ai critiqué votre code. C'est mieux que la moyenne, mais il y a place à l'amélioration. Tout le code non-trivial fait. Et il est facile de gâcher la gestion des exceptions: j'ai obtenu un -1 bien mérité il y a environ une semaine quand j'ai juste tapé un exemple try/catch/finally sans laisser mon compilateur le vérifier. – kdgregory