사용자가 큰 파일을 내 웹 사이트에 업로드하고 파일을 gzip으로 압축하여 blob에 저장하려고합니다. 그래서 나는 압축되지 않은 InputStream을 가지고 있고 BLOB은 InputStream을 원한다. GZIPOutputStream을 사용하여 OutputStream으로 InputStream을 압축하는 방법을 알고 있지만 bzlob에 필요한 InputStream으로 gzip으로 변환 된 OutputStream에서 다시 이동하는 방법은 무엇입니까?어떻게 압축되지 않은 InputStream을 gzip으로 압축 한 InputStream으로 효율적으로 변환 할 수 있습니까?
내가 찾을 수있는 유일한 방법은 ByteArrayOutputStream을 사용하고 toByteArray를 사용하여 새 InputStream을 만드는 것입니다. 하지만 그 파일의 전체 사본을 메모리에 가지고 있다는 뜻입니다. 그리고 JDBC 드라이버 구현이 스트림을 byte []로 변환하면 메모리에 두 개의 사본이 생기게되어 놀라지 않을 것입니다.
전체 파일을 메모리에 저장하지 않으려면 파일에 기록하십시오. 내가 보는 방법은 gzip 된 데이터가 어딘가에 있어야합니다. –
나는 블로프에 직접 들어가기를 원했기 때문에 전체 내용을 메모리에 저장하지 않아도되었습니다. blob 매개 변수를 설정할 때 길이를 알아야하기 때문에 작동하지 않는 것처럼 보입니다. 기술적으로, 파일로 스트리밍하고, 파일의 크기를 얻은 다음, 그것을 블롭에 입력 스트림으로 다시 사용할 수 있으므로 전체 내용을 메모리에 보유 할 필요가 없습니다. 필자는 필연적으로 파일 시스템을 내 메모리로 사용하게 될 것입니다. –