Limite de Java HttpUrlConnection l'obtention de la longueur du contenu
Droit donc, j'ai commencé mon projet sur la création d'un Java gestionnaire de téléchargement qui va bien. Le seul problème que je vois pour le moment c'est quand je demande la longueur du contenu de l'URL. Lorsque j'utilise la méthode fournie par HttpUrlConnection de getContentLength, elle renvoie un Int.
C'est super si je ne jamais télécharger des fichiers de moins de 2 GO en taille de fichier. En faisant encore plus de creuser et de trouver que java ne supporte pas unsigned int valeurs, mais même si cela ne ferait que me donner une taille de fichier de 4 go max.
Quelqu'un peut m'aider dans le bon sens de l'obtention de la taille du contenu d'un fichier de plus de 2GO.
Merci d'avance.
Mise à JOUR
Merci pour vous réponse Elite Messieurs, j'ai essayé ce que vous avez suggéré, mais qui ne cesse de revenir à une valeur nulle, de sorte qu'au lieu de ce que je faisais était
HttpURLConnection conn = (HttpURLConnection) absoluteUrl.openConnection();
conn.connect();
long contentLength = Long.parseLong(conn.getHeaderField("Content-Length"));
Pour une raison quelconque, juste à l'aide de conn.getRequestProperty retourne toujours la valeur null pour moi
getHeaderField(...)
mais je ne pouvais pas le trouver. C'est effectivement la MEILLEURE façon de le faire....J'ai mis à jour ma réponse. Oh oui, getRequestProperty
est utilisé AVANT de faire un POST/GET, c'est à dire que c'est pour une demande et non une réponse.OriginalL'auteur Brendon Randall | 2010-02-19
Vous devez vous connecter pour publier un commentaire.
Pourquoi ne pas essayer d'utiliser le headerField méthode pour obtenir la longueur du contenu? c'est à dire
C'est l'équivalent, selon les
connection.getContentLength
sauf que la valeur de retour est de type string. Cela peut donner avec précision la suite de bits de longueur.Mise à JOUR: j'ai mis à jour pour utiliser HeaderField au lieu de requestProperty...merci à l'auteur de la question.
Grâce à @FlasH de Ru, vous pouvez obtenir le même résultat à l'aide de JDK 7 et supérieur.
URLConnection.getContentLengthLong()
.Ce, en effet, appelle la nouvelle
URLConnection.getHeaderFieldLong()
méthode, qui a également été introduit dans le JDK 7 et supérieur.Btw, il y a un
connection.getContentLengthLong
disponible dès maintenant (depuis Java 7) qui fait la même chose que l'a suggéré, mais avec moins de mots.Il semble que cette solution permettra de déclencher le téléchargement aussi. comment pouvons-nous obtenir l'en-tête mais ne pas démarrer le téléchargement pour économiser de la bande passante?
Pour ceux qui recherchent le Android équivalent... d'API 24 developer.android.com/reference/java/net/... il suffit de faire une manuelle à obtenir comme les expositions de la réponse!
OriginalL'auteur Buhake Sindi