Bir kullanıcı web siteme büyük bir dosya yükler ve ben dosyayı gzip bir blob halinde saklamak istiyorum. Yani sıkıştırılmamış bir InputStream var ve blob bir InputStream istiyor. Bir InputStream'in GZIPOutputStream kullanarak bir Outputstream'e nasıl sıkıştırılacağını biliyorum, fakat gzip'ed OutputStream'den bloğun ihtiyaç duyduğu InputStream'e nasıl geri dönüyorum.Sıkıştırılmamış bir InputStream'i gzip'ed InputStream'e verimli bir şekilde nasıl dönüştürebilirim?
Bulamamın tek yolu, ByteArrayOutputStream kullanımını ve daha sonra toByteArray kullanarak yeni bir InputStream oluşturmayı içerir. Fakat bu, dosyanın belleğin tamamında bir kopyasına sahip olduğum anlamına gelir. Ve eğer JDBC sürücüsü uygulaması akışı bir bayt [] da dönüştürdüyse, bu yüzden de bana sürpriz olmazdı.
Dosyanın tamamını bellekte istemiyorsanız, bir dosyaya yazın. Gördüğüm şekilde gzip'd veri bir yere gitmeli. –
Doğrudan bloğa akmayı umuyordum, böylece tüm şeyi hafızada tutmak zorunda kalmam. Blob parametresini ayarladığım zamandaki uzunluğu bilmem gerektiğinden işe yaramayacak gibi görünüyor. Teknik olarak, bir dosyaya akabilirim, dosyanın büyüklüğünü elde edebilirim, daha sonra blob içine bir girdi akışı olarak kullanabilirim, böylece tüm şeyi bellekte tutmam gerekmeyecek. Aslında dosya sistemini bu durumda belleğim olarak kullanacağım, ki bu da yararlı olabilir. –