Skip to main content

Java GZIP Rehberi: Dosya Sıkıştırma ve Açma İşlemleri 💾

📘 Bu Rehberde Ne Öğreneceksiniz?

Bu rehberde, Java’nın java.util.zip paketindeki GZIPOutputStream ve GZIPInputStream sınıflarını kullanarak dosyaları nasıl sıkıştırıp açacağınızı öğreneceksiniz.
GZIP, özellikle Unix tabanlı sistemlerde ve web sunucularında veri aktarımını hızlandırmak için tercih edilir.


⚙️ GZIP Nedir?

GZIP (GNU Zip), tek bir dosyayı sıkıştırmak için kullanılan açık kaynaklı bir formattır.
ZIP’ten farkı, yalnızca tek dosya sıkıştırabilmesidir — klasörleri arşivlemez.

💡 Avantajları:

  • Dosya boyutlarını küçülterek disk alanı kazandırır.
  • Ağ üzerinden veri iletimini hızlandırır.
  • Basit ve platform bağımsızdır.

🧩 Adım 1: Dosyayı GZIP ile Sıkıştırma

Aşağıdaki metot, bir dosyanın içeriğini okur ve .gz uzantılı yeni bir dosyaya yazar.

private static void dosyayiGzipIleSikistir(String kaynakDosya, String gzipDosya) {
try {
FileInputStream giris = new FileInputStream(kaynakDosya);
FileOutputStream cikis = new FileOutputStream(gzipDosya);
GZIPOutputStream gzip = new GZIPOutputStream(cikis);

byte[] tampon = new byte[1024];
int uzunluk;

while ((uzunluk = giris.read(tampon)) != -1) {
gzip.write(tampon, 0, uzunluk);
}

gzip.close();
cikis.close();
giris.close();
} catch (IOException e) {
e.printStackTrace();
}
}

💬 Açıklama: Bu metod, GZIPOutputStream sınıfını kullanarak veriyi sıkıştırır. Burada Dekoratör Deseni uygulanır: GZIPOutputStream, FileOutputStream’in üzerine sarılarak veri akışına sıkıştırma özelliği ekler.


🧩 Adım 2: GZIP Dosyasını Açma (Decompress)

Bu metot .gz dosyasını okur ve açılmış veriyi yeni bir dosyaya yazar.


private static void gzipDosyasiniAc(String gzipDosya, String yeniDosya) {
try {
FileInputStream giris = new FileInputStream(gzipDosya);
GZIPInputStream gzip = new GZIPInputStream(giris);
FileOutputStream cikis = new FileOutputStream(yeniDosya);

byte[] tampon = new byte[1024];
int uzunluk;

while ((uzunluk = gzip.read(tampon)) != -1) {
cikis.write(tampon, 0, uzunluk);
}

cikis.close();
gzip.close();
} catch (IOException e) {
e.printStackTrace();
}
}

💬 Açıklama: GZIPInputStream, sıkıştırılmış veriyi adım adım çözerek (stream bazlı) yeni dosyaya yazar.


🧩 Adım 3: Ana Sınıfta Kullanım


import java.io.*;
import java.util.zip.*;

public class RabisuGZIPOrnek {

public static void main(String[] args) {
String kaynak = "/home/tr1-node01/yedek.log";
String gzip = "/home/tr1-node01/yedek.log.gz";
String yeni = "/home/tr1-node01/yedek_yeniden.log";

dosyayiGzipIleSikistir(kaynak, gzip);
gzipDosyasiniAc(gzip, yeni);
}
}

💬 Açıklama: Ana sınıf, sıkıştırma ve açma işlemlerini ardışık olarak çağırır. Bu sayede dosya hem .gz formatına dönüştürülür hem de geri açılır.


📊 GZIP ile İlgili Temel Sınıflar

SınıfGörevi
GZIPOutputStreamDosyayı .gz formatında sıkıştırır.
GZIPInputStream.gz dosyasını açar.
FileInputStreamDosyayı okur (giriş akışı sağlar).
FileOutputStreamVeriyi diske yazar.

🧾 Olası Hata ve Çözümler

Hata:


java.util.zip.ZipException: Not in GZIP format

💡 Çözüm:

Açılmaya çalışılan dosya GZIP formatında değilse bu hata oluşur. Doğru formatta sıkıştırılmış bir .gz dosyası kullanın.


⚡ Performans Notu

1024 baytlık tampon kullanımı, büyük dosyalar için bellek verimliliğini artırır.

Daha büyük tamponlar (8192 vb.) okuma/yazma hızını iyileştirebilir.


❓ Sıkça Sorulan Sorular (SSS)

  1. GZIP klasörleri sıkıştırabilir mi?

Hayır, yalnızca tek dosyayı sıkıştırır. Klasörler için .tar.gz kombinasyonu kullanılmalıdır.

  1. GZIPOutputStream neden FileOutputStream üzerine sarılır?

Bu, Dekoratör Tasarım Deseni'dir. Dosya akışına ekstra işlev (sıkıştırma) kazandırmak için uygulanır.

  1. Hata alırsam nasıl test ederim?

Linux/macOS’ta gzip -t dosya.gz komutuyla dosyanın bütünlüğünü kontrol edebilirsiniz.

  1. Java dışında GZIP destekleyen diller var mı?

Evet, Python (gzip modülü) ve Node.js (zlib) gibi birçok dil GZIP desteği sunar.


🎯 Sonuç

Artık Java’da dosyaları GZIP formatında sıkıştırmayı ve açmayı öğrendin. Bu teknik, log yönetimi, veri yedekleme ve ağ optimizasyonu gibi birçok alanda hayat kurtarır.

💡 Ekstra: Java tabanlı projelerini optimize etmek için Rabisu Bulut üzerinde test ortamı kurabilir, performans farkını anında görebilirsin.