J'essaie d'écrire le contenu d'un tampon d'octets dans un fichier en utilisant le décalage (position). Il fonctionne quand je convertir en un flux d'entrée, mais pas quand je l'envelopper dans une nouvelle ByteBufferHabillage d'un fichier java.nio.ByteBuffer dans une nouvelle instance, avec décalage, perte d'octets
Cela fonctionne:
new ByteArrayInputStream(byteBuffer.array(), byteBuffer.position(), byteBuffer.array().length - byteBuffer.position())
Cela ne
ByteBuffer.wrap(byteBuffer.array(), byteBuffer.position(), byteBuffer.array().length - byteBuffer.position())
Plus précisément, quand je dis il ne fonctionne pas, écrit le contenu du tampon dans un fichier:
Files.write(path, ByteBuffer.wrap(byteBuffer.array(), byteBuffer.position(), byteBuffer.array().length - byteBuffer.position()).array())
résultats en octets écrits dans le fichier, mais il est incomplet, de sorte que le jpeg ne peuvent pas être vus, mais si j'écris le même tampon, envelopper dans un ByteArrayInputStream, il ne fonctionne pas:
val in = new ByteArrayInputStream(byteBuffer.array(), byteBuffer.position(), byteBuffer.array().length - byteBuffer.position())
Iterator.continually (in.read).takeWhile (-1 != _).foreach (fileOutputStream.write)
donc je dois être faire quelque chose de stupide et peut-être je ne comprends pas comment fonctionne ByteBuffer
Vos travaux de suggestion, mais je suis toujours curieux de savoir comment faire fonctionner avec quelque chose comme Files.write, qui prend un tableau d'octets. Certains API avec lesquels je travaille ne prennent qu'un tableau d'octets – Andrew
Vous devez copier manuellement la partie correcte du tableau, voir par ex. ici https://stackoverflow.com/a/679325/2369544. Aussi, une suggestion qui en quelque sorte contredit la philosophie derrière le ByteBuffer et vous ne devriez le faire qu'en dernier recours: https://stackoverflow.com/a/679335/2369544. – starikoff