Je rencontre un problème concernant la fonction de marquage de la classe Buffer de l'API Java NIO. J'essaie d'exécuter quelques exemples en utilisant un ByteBuffer, qui hérite de la fonctionnalité de marquage de la classe parent Buffer.Marquage de tampon en Java NIO
L'exemple que je veux réaliser est d'avoir "AwesomeSauce" comme une sortie d'abord suivie par "Sauce", en utilisant la fonctionnalité de marquage. Le code est ci-dessous:
public class MarkingNIO {
public static void main(String[] args) {
ByteBuffer buffer = ByteBuffer.allocate(20);
byte byteArray[];
buffer.put("AwesomeSauce".getBytes());
int prevPos = buffer.position();
buffer.position(7).mark().position(prevPos); //Mark position 7 and revert back so that we can flip
buffer.flip();
byteArray = new byte[buffer.limit() - buffer.position()];
for (int i = 0; buffer.hasRemaining(); i++) {
byteArray[i] = buffer.get();
}
System.out.println("Whole string: " + new String(byteArray));
buffer.reset();
byteArray = new byte[buffer.limit() - buffer.position()];
for (int i = 0; buffer.hasRemaining(); i++) {
byteArray[i] = buffer.get();
}
System.out.println("Partial String" + new String(byteArray));
}
}
La sortie pour moi est comme suit:
AwesomeSauce
Exception in thread "main" java.nio.InvalidMarkException
at java.nio.Buffer.reset(Buffer.java:306)
at markingnio.MarkingNIO.main(MarkingNIO.java:37)
Java Result: 1
Les points d'erreur à la méthode de réinitialisation.
EDIT: Je l'ai fait pour tester les méthodes mark() et reset() à des fins d'apprentissage. De toute façon, le problème était que la méthode flip() avait une déclaration de "mark = -1", et la position (int) avait une déclaration de "if (mark> position) mark = -1;"
Vous n'avez pas besoin de toute cette complication. Utilisez simplement 'get (int index)' directement. – EJP
Je le fais à des fins d'apprentissage. –