Tampon du Flux d'Entrée mark read limite

Je suis en train d'apprendre comment utiliser un InputStream. J'ai essayé d'utiliser la marque pour BufferedInputStream, mais quand j'ai essayer de réinitialiser j'ai ces exceptions:

java.io.IOException: Resetting to invalid mark

Je pense que cela signifie que mon mark read limite est mal réglé. En fait, je ne sais pas comment définir la lecture de limite dans la marque(). J'ai essayé comme ceci:

is = new BufferedInputStream(is);
is.mark(is.available());

C'est également faux.

is.mark(16);

Cela jette aussi de la même exception.
Comment puis-je savoir ce que lire limite je suis censé définir? Étant donné que je vais être la lecture de différentes tailles de fichier à partir du flux d'entrée.

Mon point de vue personnel? N'utilisez pas de marque - alors que je suis sûr qu'il y en est un, je n'ai pas encore trouvé une bonne raison pour cela. Souvent c'est un signe de mauvaise gestion dans la première place. J'ai tendance à penser à un flux comme pas un courant, à moins que je m'occupe de la forme la plus élémentaire. Je préfère avoir un resserrement de l'emballage autour de lui qui obtient ses informations, les paquets, et envoie le paquet pour le traitement de quelque part dans l'application.
Merci pour votre commentaire. Comme je l'ai dit précédemment, je suis nouveau dans le travail avec les InputStream. J'étais en train d'essayer d'utiliser les flux d'entrée deux fois. J'ai pensé que c'est la façon de le faire. Réglage de la marque et de réinitialisation. Avez-vous d'autres suggestions à faire pour arriver à cela?
Marque fonctionne comme ceci. Disons que votre flux d'entrée est A B C D E. Vous processus A B jusqu'à présent. (Rappelez-vous, vous ne savez pas ce qui est "en aval"). Vous marquez. Vous lisez encore, et vous obtenez C D E. Vous regarder et dire: "Attendez, je ne peux pas le processus de C D E dans ce mode!" pour quelque raison que ce soit. Donc, vous dites "je souhaite vraiment que je pourrais retourner au processus de C D E de nouveau... que vous pouvez, puisque vous mark()ed. Vous venez de reset() de mettre le flux de retour à l'endroit où il était quand vous avez marqué, et vous pouvez le lire à nouveau comme vous avez avant.
Donc quand vous dites "je veux utiliser le flux d'entrée deux fois" pourriez-vous préciser ce que vous essayez de faire? Je suis sûr que la communauté peut venir avec quelque chose (exemple de code, ou au moins des conseils) pour vous aider à atteindre vos objectifs.
C'est la situation. J'ai un flux d'entrée. qui, la première, serait utilisé pour lire par apache POI pour obtenir le document d'attribut. Puis le même flux d'entrée seront utilisées afin de lire encore et stocké le document. Le problème est. Après apache poi prendre le flux d'entrée, le document est stocké, mais la taille est de 0. Je pense que cela a été causé par le flux d'entrée avait été lu avant.

OriginalL'auteur Nur Aini | 2011-12-22