InputStream바이트 배열로 전체 를 어떻게 읽 습니까?
답변
Apache Commons IO 를 사용 하여 이와 유사한 작업을 처리 할 수 있습니다 .
IOUtils유형은을 읽을 수있는 정적 메소드가 InputStream와를 반환을 byte[].
InputStream is;
byte[] bytes = IOUtils.toByteArray(is);
내부적으로 이것은 a를 생성 ByteArrayOutputStream하고 바이트를 출력에 복사 한 다음을 호출합니다 toByteArray(). 4KiB의 블록으로 바이트를 복사하여 큰 파일을 처리합니다.
답변
에서 각 바이트를 읽고에 InputStream씁니다 ByteArrayOutputStream.
그런 다음 다음을 호출하여 기본 바이트 배열을 검색 할 수 있습니다 toByteArray().
InputStream is = ...
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[16384];
while ((nRead = is.read(data, 0, data.length)) != -1) {
  buffer.write(data, 0, nRead);
}
return buffer.toByteArray();
답변
마지막으로, 20 년 후 Java 9 덕분에 써드 파티 라이브러리가 필요없는 간단한 솔루션이 있습니다 .
InputStream is;
…
byte[] array = is.readAllBytes();
편리한 방법 readNBytes(byte[] b, int off, int len)과 transferTo(OutputStream)반복되는 요구 사항을 해결하십시오.
답변
바닐라 자바 DataInputStream와 그 readFully방법을 사용하십시오 (적어도 Java 1.4부터 존재합니다).
...
byte[] bytes = new byte[(int) file.length()];
DataInputStream dis = new DataInputStream(new FileInputStream(file));
dis.readFully(bytes);
...
이 방법에는 다른 맛이 있지만이 사용 사례에는 항상 이것을 사용합니다.
답변
답변
항상 그렇듯이 Spring 프레임 워크 (3.2.2 이후의 스프링 코어)에는 다음과 같은 것이 있습니다.StreamUtils.copyToByteArray()
답변
public static byte[] getBytesFromInputStream(InputStream is) throws IOException {
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    byte[] buffer = new byte[0xFFFF];
    for (int len = is.read(buffer); len != -1; len = is.read(buffer)) {
        os.write(buffer, 0, len);
    }
    return os.toByteArray();
}
