Comment puis-je rechercher (changer la position) d'un S'il ne peut pas être fait en utilisant EDIT: B> J'ai trouvé un moyen d'obtenir ce que je tente de faire, mais c'est un peu désordonné. C'est ma première fois d'essayer d'utiliser les classes Java IO et elle a été complètement négative. Il manque des fonctionnalités fondamentales (IMO), et il a de nombreuses façons de faire la même chose (par exemple, de lire des primitives à partir d'un fichier que vous pouvez utiliser byteArrayInputStream code> (
java.io code>)? C'est quelque chose de tellement évident, mais je ne peux pas sembler trouver une méthode pour cela nulle part (
marquer code> /
réinitialiser code> ne suffit pas, j'ai besoin de définir la position sur n'importe où sur le
introuvable code>). p>
java.io code> et je dois passer à
java.nio code> et utiliser un
bytebuffer code>, comment peut-on Je reçois quelque chose de similaire à un
dataOutputStream code> emballage A
byteArrayOutPutStream code> à l'aide de
java.nio code>? Je ne trouve aucune sorte de mémoire tampon redimensionnable. P>
imageIO.CreateImageInputStream code> crée un
imageInputStream code>, ce qui correspond exactement à ce que je veux (peut rechercher et lire des primitives). Cependant, en utilisant un
byteArrayInputStream code> renvoie un
filecacheimageinputtream code>, qui signifie essentiellement qu'il copie le tableau d'octets à un fichier juste pour rechercher. P>
aléatoireAccessfile code>,
datagnutstream code> +
FileInputStream code>,
FileImageInputStream code>,
FILECHANNEL CODE> +
BYTEBUFFER code>, et peut-être encore plus). P>
3 Réponses :
Vous utiliseriez réinitialiser () code> /
saute () code>. Je ne peux pas dire que c'est la plus belle API du monde, mais cela devrait fonctionner:
public void seek(ByteArrayInputStream input, int position)
throws IOException
{
input.reset();
input.skip(position);
}
Si Mark n'est pas appelé, la valeur par défaut de la position marquée est de 0% appelant la réinitialisation déplace le pointeur sur 0, puis la fonction de saut déplace le pointeur sur la position donnée.
@Sumitkumarsaha: Oui ... Je ne suis pas sûr du point de votre commentaire.
J'ajoutais juste votre réponse
Il y a un byteArrayInputStream (octet (), int, int) code>
constructeur qui vous donnera un flux d'entrée qui va lire jusqu'à un nombre donné d'octets à partir de un décalage donné. Vous pouvez utiliser ceci pour simuler la recherche d'un décalage arbitraire dans le flux. P>
Vous devez faire face au fait que "rechercher" vous donne un nouvel objet de flux, ce qui peut être gênant. Cependant, cette approche n'implique pas de copier des octets ni de les sauver dans un fichier, et il devrait être sûr de ne pas vous soucier de la fermeture des objets byearrayInputStream code>. P>
Si vous créez le byteArrayInputStream code> pour passer ailleurs, étendre la classe et manipuler
POS code> (un
protégé code> membre
byteArrayInputStream < / code>) comme vous le souhaitez. p>
Voyez-vous un problème avec l'utilisation de
rechercher code>?
@Vilay Mathew: Qu'est-ce que
recherche code>? Je ne vois rien sur byearrayInputStream.
Les E / S en Java sont un énorme gâchis. J'enseigne aux étudiants de première année et j'essaie de le rendre simple, mais c'est toujours un point de confusion.