110 votes

Déterminer la taille d'un InputStream

Ma situation actuelle est la suivante : je dois lire un fichier et placer le contenu dans InputStream. Ensuite, je dois placer le contenu de InputStream dans un tableau de bytes, ce qui nécessite (autant que je sache) la taille de InputStream. Des idées ?

Comme demandé, je vais montrer le flux d'entrée que je crée à partir d'un fichier téléchargé

InputStream uploadedStream = null;
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
java.util.List items = upload.parseRequest(request);      
java.util.Iterator iter = items.iterator();

while (iter.hasNext()) {
    FileItem item = (FileItem) iter.next();
    if (!item.isFormField()) {
        uploadedStream = item.getInputStream();
        //CHANGE uploadedStreambyte = item.get()
    }
}

La requête est un objet HttpServletRequest, qui est similaire au FileItemFactory et ServletFileUpload issus du paquet Apache Commons FileUpload.

0voto

Bruno Vidotto Points 1

Ajouter à votre pom.xml:

    commons-io
    commons-io
    2.5

Utiliser pour obtenir la longueur du type de contenu (fichier InputStream):

IOUtils.toByteArray(file).length

-1voto

Carlos.V Points 317

Utilisez cette méthode, il vous suffit de passer l'InputStream

public String readIt(InputStream is) {
    if (is != null) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8);

        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            sb.append(line).append("\n");
        }
        is.close();
        return sb.toString();
    }
    return "erreur : ";
}

-2voto

Ashnet Points 133
    try {
        InputStream connInputStream = connection.getInputStream();
    } catch (IOException e) {
        e.printStackTrace();
    }

    int size = connInputStream.available();

int available () Returns an estimate of the number of bytes that can be read (or skipped over) from this input stream without blocking by the next invocation of a method for this input stream. The next invocation might be the same thread or another thread. A single read or skip of this many bytes will not block, but may read or skip fewer bytes.

[InputStream - Android SDK | Android Developers](https://developer.android.com/reference/java/io/InputStream.html#available())

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X