offset (position)을 사용하여 바이트 버퍼의 내용을 파일에 쓰려고합니다. 내가 입력 스트림로 변환 할 때 그것은 작동,하지만 나는 새의 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는 볼 수 없습니다,하지만 난이 InputStream에 포장, 같은 버퍼를 작성하는 경우,이 작업을 수행합니다
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