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();
}
