Một người dùng tải lên một tệp lớn vào trang web của tôi và tôi muốn lưu trữ tệp và lưu trữ nó trong một blob. Vì vậy, tôi có một InputStream không nén và blob muốn một InputStream. Tôi biết làm thế nào để nén một InputStream đến một Outputstream bằng cách sử dụng GZIPOutputStream, nhưng làm thế nào để tôi đi từ gzip'ed OutputStream trở lại InputStream cần thiết bởi blob.Làm thế nào tôi có thể chuyển đổi một InputStream không nén thành một Gzip'ed InputStream một cách hiệu quả?
Cách duy nhất tôi có thể tìm thấy liên quan đến việc sử dụng ByteArrayOutputStream và sau đó tạo một InputStream mới bằng cách sử dụng toByteArray. Nhưng điều đó có nghĩa là tôi có toàn bộ bản sao của tệp trong bộ nhớ. Và nó sẽ không làm tôi ngạc nhiên nếu việc thực hiện trình điều khiển JDBC chuyển đổi dòng sang một byte [] cũng vì vậy tôi sẽ có hai bản sao trong bộ nhớ.
Nếu bạn không muốn toàn bộ tệp trong bộ nhớ thì hãy ghi vào một tệp. Cách tôi nhìn thấy nó dữ liệu gzip'd cần phải đi đâu đó. –
Tôi đã hy vọng luồng trực tiếp vào blob vì vậy tôi không bao giờ phải có toàn bộ điều trong bộ nhớ. Có vẻ như điều đó sẽ không hoạt động vì tôi cần biết chiều dài tại thời điểm tôi đặt tham số blob. Tôi đoán về mặt kỹ thuật, tôi có thể phát trực tuyến tới một tệp, lấy kích thước của tệp, sau đó sử dụng nó làm luồng nhập vào trở lại blob để tôi không bao giờ cần giữ toàn bộ nội dung trong bộ nhớ. Về cơ bản, tôi sẽ sử dụng hệ thống tệp như bộ nhớ của mình trong trường hợp đó, điều này có thể sẽ hữu ích. –