Java belgelerini nasıl karşılaştırılır – GroupDocs API ile rehber

Java belgelerini karşılaştırmanız gerektiğinde—sözleşmeler, teknik spesifikasyonlar veya PDF raporları olsun—manuel olarak yapmak riskli ve zaman alıcıdır. Bu öğreticide, GroupDocs.Comparison API’sini kullanarak karşılaştırma sürecini otomatikleştirmenin yolunu, bellek kullanımını düşük tutmak ve performansı yüksek tutmak için Java akışlarını (streams) nasıl kullanacağınızı gösteriyoruz. Tam iş akışını görecek, belirli değişiklikleri nasıl kabul edip reddedeceğinizi öğrenecek ve büyük ölçekli dağıtımlar için en iyi uygulama ipuçlarını keşfedeceksiniz.

Hızlı cevaplar

  • Java belgelerini karşılaştırmak için en iyi kütüphane hangisidir? GroupDocs.Comparison (Java)
  • DOCX, PDF ve TXT dosyalarını karşılaştırabilir miyim? Yes – the API supports 50+ formats.
  • Akış tabanlı karşılaştırma bellek açısından verimli mi? Absolutely; it processes data in chunks instead of loading whole files.
  • Belirli değişiklikleri nasıl kabul eder veya reddedersiniz? Use ChangeInfo.setComparisonAction(...) on the returned changes.
    ChangeInfo.setComparisonAction(...) bir tespit edilen değişiklik için eylemi (kabul et veya reddet) ayarlar.
  • Üretim için lisansa ihtiyacım var mı? Yes – a commercial license removes watermarks and unlocks full features.

“how to compare java” GroupDocs ile nedir?

İki belgenizi karşılaştırıcıya yükleyin ve getChanges() metodunu çağırın – API, eklemeler, silmeler, biçimlendirme ayarlamaları ve görüntü değişiklikleri dahil olmak üzere ayrıntılı bir fark listesi döndürür, tipik dosyalar için birkaç milisaniye içinde. Bu yanıt size temel fikri verir: kütüphane diff algoritmasını soyutlar, bu yüzden yalnızca akışları (streams) sağlamanız ve ortaya çıkan ChangeInfo nesnelerini işlemeniz gerekir.
getChanges() her farkı tanımlayan bir ChangeInfo nesnesi listesi döndürür.

GroupDocs.Comparison, belgeler arasındaki farkları tespit etmek için bir Java kütüphanesidir. 50’den fazla giriş ve çıkış formatını destekler, çok sayfalı dosyaları belgenin tamamını belleğe yüklemeden işler ve programatik olarak kabul edebileceğiniz veya reddedebileceğiniz yapılandırılmış bir değişiklik listesi döndürür.

Neden Java belge karşılaştırması için GroupDocs.Comparison kullanmalısınız?

Kesin değişiklik takibi, çapraz format desteği ve akış tabanlı işleme sayesinde 200 sayfalık PDF’lerde bile RAM kullanımını 100 MB’nin altında tutarsınız. Kütüphane, standart 4 çekirdekli bir sunucuda 100 sayfalık belgeleri 2 saniyenin altında işler, bu da CI boru hatları, belge yönetim sistemleri ve gerçek zamanlı diff sonuçlarına ihtiyaç duyan mikro hizmetler için uygundur.

Önkoşullar

  • JDK 8+ (11+ önerilir)
  • Maven veya Gradle (örnekler Maven kullanır)
  • Java akışları ve istisna yönetimi hakkında temel bilgi
  • Desteklenen herhangi bir formatta iki örnek belge (DOCX, PDF, TXT, vb.)

Pro ipucu: Akışlara yeniyseniz, kod parçacıkları her adımı açıklayan satır içi yorumlar içerir.

GroupDocs.Comparison’ı Kurmak: Temel

Maven yapılandırması

Depoyu ve bağımlılığı pom.xml dosyanıza ekleyin:

<repositories>
   <repository>
      <id>repository.groupdocs.com</id>
      <name>GroupDocs Repository</name>
      <url>https://releases.groupdocs.com/comparison/java/</url>
   </repository>
</repositories>

<dependencies>
   <dependency>
      <groupId>com.groupdocs</groupId>
      <artifactId>groupdocs-comparison</artifactId>
      <version>25.2</version>
   </dependency>
</dependencies>

Lisanslamayı Anlamak (iş tarafı)

GroupDocs ticari bir modelde çalışır, ancak oldukça esnek bir yapıya sahiptir:

  • Ücretsiz deneme – değerlendirme ve küçük projeler için idealdir.
  • Geçici lisanslar – kanıt‑konsepti çalışmaları için mükemmeldir (buradan alın)
  • Ticari lisanslar – üretim için gereklidir (fiyatlandırma detayları)

Deneme sürümü çıktı belgelerine filigran ekler, ancak API davranışı aynıdır.

Temel uygulama: akış tabanlı belge karşılaştırması

Tam iş akışı

  1. Başlat – kaynak belgeyi bir akış (stream) olarak yükleyin.
  2. Karşılaştır – hedef belge akışını ekleyin.
  3. AlgılaChangeInfo nesnelerinin bir listesini alın.
  4. Karar Ver – değişiklikleri programatik olarak kabul edin veya reddedin.
  5. Oluştur – son birleştirilmiş belgeyi bir çıktı akışına (output stream) yazın.

Adım 1: Kaynak belge akışıyla karşılaştırıcıyı başlat

try (InputStream sourceStream = new FileInputStream(sourceFilePath);
     InputStream targetStream = new FileInputStream(targetFilePath);
     OutputStream resultStream = new FileOutputStream(outputFilePath)) {

    Comparer comparer = new Comparer(sourceStream);

Neden akışlar? Veriyi parçalar halinde işleyerek belleği düşük tutar, tüm dosyayı yüklemek yerine.

Adım 2: Karşılaştırma için hedef belgeyi ekle

comparer.add(targetStream);

Motor artık her iki belgeyi de sahip ve fark (diff) işlemine başlayabilir.

Adım 3: Değişiklikleri algıla ve analiz et

ChangeInfo[] changes = comparer.getChanges();

Her ChangeInfo bir ekleme, silme, biçimlendirme ayarı, görüntü değişikliği vb. temsil eder.

Adım 4: Değişiklikleri programatik olarak kabul et veya reddet

changes[0].setComparisonAction(ComparisonAction.REJECT);

Tipik otomasyon kalıpları:

  • • Tüm biçimlendirme değişikliklerini kabul et, içerik düzenlemelerini reddet.
  • • Başlık/altbilgi değişikliklerini otomatik reddet.
  • • Yalnızca güvenilir yazarların değişikliklerini kabul et.

Adım 5: Son belgeyi oluştur

comparer.applyChanges(resultStream, new ApplyChangeOptions(changes));

ApplyChangeOptions birleştirme davranışını, örneğin orijinal stilin korunması gibi, ince ayarlamanıza olanak tanır.

Gerçek dünya uygulamaları: nerede öne çıkar

  • Hukuki sözleşme incelemesi – kırmızı satırları otomatik işaretler ve doğru inceleyiciye yönlendirir.
  • Akademik makale revizyonları – küçük biçimlendirme düzeltmelerini kabul ederken, önemli düzenlemeleri işaretler.
  • Yazılım dokümantasyonu – istemci kodunu kırabilecek API spesifikasyon değişikliklerini algılar.
  • Regülasyon uyumu – politika güncellemeleri için denetim izlerini tutar.

Yaygın tuzaklar ve nasıl kaçınılır

Bellek yönetimi sorunları

  • Sorun: Büyük PDF’lerde bellek dışı hatalar.
  • Çözüm: Her zaman try‑with‑resources kullanın (gösterildiği gibi) ve yığın (heap) boyutunu izleyin (-Xmx4g veya daha yüksek).
try (InputStream source = new FileInputStream(sourcePath)) {
    // comparison logic
}

Format uyumluluğu sürprizleri

  • Sorun: DOCX ile PDF karşılaştırması, ince düzen farklarını kaçırabilir.
  • Çözüm: Kritik hukuki belgeler için aynı formatta karşılaştırmaları tercih edin.

Performans düşüşü

  • Sorun: Zaman içinde daha yavaş karşılaştırmalar.
  • Çözüm: Geçici dosyaları temizleyin, belge boyutunu sınırlayın ve toplu işler için asenkron işleme düşünün.

Değişiklik algılama hassasiyeti

  • Sorun: Çok fazla önemsiz değişiklik (boşluk, font).
  • Çözüm: Motoru gereksiz farkları yok sayacak şekilde yapılandırın:
CompareOptions options = new CompareOptions();
options.setIgnoreWhitespaces(true);
comparer.compare(outputStream, options);

CompareOptions karşılaştırıcının hangi tür değişiklikleri algılayacağını veya yok sayacağını yapılandırmanıza olanak tanır.

Performans optimizasyonu: üretim‑hazır ipuçları

  • JVM ayarı: G1GC ve uygun yığını (-Xmx8g >100 MB belgeler için) kullanın.
  • Asenkron işleme: Karşılaştırmaları bir işçi kuyruğuna (worker queue) devredin.
  • Önbellekleme: Sık sık karşılaştırılan belge çiftleri için sonuçları saklayın.
  • Ölçekleme: Karşılaştırıcıyı bir yük dengeleyicinin arkasında durumsuz bir mikro hizmet olarak dağıtın.

Sorun giderme rehberi

SemptomTanıÇözüm
OutOfMemoryErrorBelge yığını aşıyorYığını artırın, parçalama (chunking) kullanın veya gereksiz bölümleri kırpmak için ön‑işlem yapın
Eksik değişikliklerUyumsuz formatlar veya düşük hassasiyetFormatları doğrulayın, CompareOptions ayarlayın
Zamanla yavaşlamaKaynak sızıntılarıTüm akışların kapalı olduğundan emin olun, geçici dizinleri temizleyin

Alternatif yaklaşımlar (GroupDocs en uygun seçenek olmadığında)

  • Apache Tika + özel diff – ücretsiz ancak daha fazla kod gerektirir.
  • Format‑spesifik kütüphaneler – tek formatlı boru hatları için iyidir.
  • Bulut API’leri – düşük bakım gerektirir ancak gecikme ve veri gizliliği endişeleri ekler.

Sıkça sorulan sorular

S: GroupDocs.Comparison hangi belge formatlarını destekliyor?
C: DOCX, PDF, PPTX, XLSX, TXT, HTML ve daha fazlası dahil olmak üzere 50’den fazla format. format dokümantasyonuna bakın.

S: Aynı anda iki’den fazla belgeyi karşılaştırabilir miyim?
C: Evet. getChanges()‘den önce comparer.add() metodunu birden çok kez çağırarak birkaç sürümü birleştirebilirsiniz.

S: Şifre korumalı dosyaları nasıl yönetirim?
C: Şifreyi sağlamak için LoadOptions kullanın:

LoadOptions loadOptions = new LoadOptions();
loadOptions.setPassword("your-password");
Comparer comparer = new Comparer(sourceStream, loadOptions);

LoadOptions bir belgeyi yüklerken şifre gibi seçenekleri belirtmenizi sağlar.

S: Dosya boyutu için bir limit var mı?
C: Katı bir limit yok, ancak bellek kullanımı boyutla artar. 100 MB’den büyük dosyalar için yığını artırın veya belgeyi bölün.

S: Hangi değişiklik türlerinin algılanacağını özelleştirebilir miyim?
C: Kesinlikle. CompareOptions boşlukları, biçimlendirmeyi yok sayabilir veya belirli bölümlere odaklanmanızı sağlar.

S: Bu Docker konteynerlerinde çalışır mı?
C: Evet – yeterli bellek ayırın ve lisans dosyanızı bağlayın (mount).

Ek kaynaklar


Son Güncelleme: 2026-08-30
Test Edilen Versiyon: GroupDocs.Comparison 25.2 (Java)
Yazar: GroupDocs

İlgili Öğreticiler