我试图使用偏移量(位置)将字节缓冲区的内容写入文件。它的工作原理,当我转换为输入流,而不是当我在一个新的ByteBuffer包装将一个java.nio.ByteBuffer包装在一个新的实例中,用偏移量丢失字节
这工作:
new ByteArrayInputStream(byteBuffer.array(), byteBuffer.position(), byteBuffer.array().length - byteBuffer.position())
这不
ByteBuffer.wrap(byteBuffer.array(), byteBuffer.position(), byteBuffer.array().length - byteBuffer.position())
更具体地讲,当我说它不起作用,将缓冲区的内容写入文件中:
Files.write(path, ByteBuffer.wrap(byteBuffer.array(), byteBuffer.position(), byteBuffer.array().length - byteBuffer.position()).array())
结果字节写入文件,但它是不完整的,所以JPEG无法查看,但如果我写相同的缓冲区,在一个ByteArrayInputStream包装,它的工作:
val in = new ByteArrayInputStream(byteBuffer.array(), byteBuffer.position(), byteBuffer.array().length - byteBuffer.position())
Iterator.continually (in.read).takeWhile (-1 != _).foreach (fileOutputStream.write)
所以我必须做一些愚蠢的事情,也许我不明白ByteBuffer如何工作
你的建议的作品,但我还是好奇如何使它的东西,如Files.write,这需要一个字节数组工作。我正在使用的某些apis只需要一个字节数组 – Andrew
您必须手动复制数组的正确部分,请参阅这里https://stackoverflow.com/a/679325/2369544。还有一个建议,它有点与ByteBuffer背后的哲学相矛盾,你应该只作为最后的手段:https://stackoverflow.com/a/679335/2369544。 – starikoff