Skip to content

Latest commit

 

History

History
242 lines (184 loc) · 18.9 KB

File metadata and controls

242 lines (184 loc) · 18.9 KB
categories
Java Development
date 2026-01-18
description เรียนรู้วิธีเปรียบเทียบไฟล์ Word หลายไฟล์โดยใช้การเปรียบเทียบเอกสารสตรีม Java กับ GroupDocs.Comparison บทเรียนเต็มพร้อมตัวอย่างโค้ดและเคล็ดลับการแก้ไขปัญหา
keywords Java document comparison stream, GroupDocs comparison Java tutorial, stream based document comparison, Java Word document diff, how to compare multiple Word documents Java
lastmod 2026-01-18
linktitle Java Stream Document Comparison
tags
java
document-comparison
streams
groupdocs
tutorial
title เปรียบเทียบไฟล์ Word หลายไฟล์ด้วย Java Streams | GroupDocs
type docs
url /th/java/document-loading/java-stream-comparison-groupdocs-comparison/
weight 1

เปรียบเทียบไฟล์ Word หลายไฟล์ด้วย Java Streams

เคยรู้สึกว่าตัวเองจมอยู่ในเวอร์ชันเอกสารมากมาย พยายามหาว่าอะไรเปลี่ยนแปลงระหว่างร่างต่าง ๆ หรือไม่? คุณไม่ได้เป็นคนเดียว ไม่ว่าจะเป็นสัญญา รายงาน หรือเอกสารที่ทำงานร่วมกัน การ เปรียบเทียบไฟล์ Word หลายไฟล์ ด้วยตนเองเป็นเรื่องที่น่ากลัวและกินเวลามาก ในคู่มือนี้ เราจะแสดงวิธีทำ java stream document comparison ด้วยไลบรารี GroupDocs.Comparison เพื่อให้คุณสามารถทำงานอัตโนมัติ จัดการไฟล์ขนาดใหญ่ได้อย่างมีประสิทธิภาพ และกำหนดสไตล์ผลลัพธ์ตามที่ต้องการ

คำตอบสั้น ๆ

  • ไลบรารีที่รองรับการเปรียบเทียบแบบ stream‑based คืออะไร? GroupDocs.Comparison สำหรับ Java
  • คีย์เวิร์ดหลักของบทเรียนนี้คืออะไร? compare multiple word files
  • ต้องใช้ Java เวอร์ชันใด? JDK 8 หรือสูงกว่า (แนะนำ Java 11+)
  • ต้องมีลิขสิทธิ์หรือไม่? ทดลองใช้ฟรีสำหรับการประเมิน; ต้องมีลิขสิทธิ์เชิงพาณิชย์สำหรับการใช้งานจริง
  • สามารถเปรียบเทียบไฟล์มากกว่าสองไฟล์พร้อมกันได้หรือไม่? ใช่ – API รองรับหลาย stream เป้าหมายในคำเรียกเดียว

“compare multiple word files” ด้วย Streams คืออะไร?

การเปรียบเทียบแบบ stream‑based จะอ่านเอกสารเป็นชิ้นเล็ก ๆ แทนการโหลดไฟล์ทั้งหมดเข้าสู่หน่วยความจำ ทำให้สามารถ compare multiple word files แม้ไฟล์จะมีขนาดหลายสิบหรือหลายร้อยเมกะไบต์ได้ โดยทำให้แอปพลิเคชันของคุณตอบสนองได้และใช้หน่วยความจำน้อยลง

ทำไมต้องใช้ Java Stream Document Comparison?

  • ประหยัดหน่วยความจำ – เหมาะสำหรับสัญญาขนาดใหญ่หรือการประมวลผลเป็นชุด
  • ขยายขนาดได้ – เปรียบเทียบเอกสารหลักกับหลาย ๆ เวอร์ชันในหนึ่งการทำงาน
  • กำหนดสไตล์ได้ – ไฮไลท์การแทรก, การลบ, และการแก้ไขตามที่คุณต้องการ
  • พร้อมใช้บนคลาวด์ – ทำงานกับ stream จากไฟล์ในเครื่อง, ฐานข้อมูล, หรือคลาวด์สตอเรจ (เช่น AWS S3)

ข้อกำหนดเบื้องต้นและการตั้งค่าสภาพแวดล้อม

ก่อนจะลงมือเขียนโค้ด เรามาตรวจสอบว่าสภาพแวดล้อมการพัฒนาของคุณพร้อมหรือยัง

เครื่องมือที่ต้องมี

  • JDK 8+ (แนะนำ Java 11 หรือ 17)
  • Maven (หรือ Gradle หากคุณชอบ)
  • ไลบรารี GroupDocs.Comparison (เวอร์ชันล่าสุดที่เสถียร)

การกำหนดค่า Maven ที่ทำงานได้จริง

<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>

เคล็ดลับ: หากคุณทำงานอยู่หลังไฟร์วอลล์ขององค์กร ให้กำหนด settings.xml ของ Maven ด้วยรายละเอียดพร็อกซีของคุณ

ภาพรวมการให้ลิขสิทธิ์

  • Free Trial – ผลลัพธ์มีลายน้ำ, เหมาะสำหรับการทดสอบ
  • Temporary License – ระยะเวลาประเมินที่ขยายออกไป
  • Commercial License – จำเป็นสำหรับการใช้งานในสภาพแวดล้อมการผลิต

เมื่อใดควรใช้ Stream‑Based Document Comparison

สถานการณ์ แนะนำ
ไฟล์ Word ขนาดใหญ่ (≥ 50 MB) ✅ ใช้ streams
สภาพแวดล้อม RAM จำกัด (เช่น Docker containers) ✅ ใช้ streams
การประมวลผลเป็นชุดของสัญญาจำนวนมาก ✅ ใช้ streams
ไฟล์ขนาดเล็ก (< 10 MB) หรือการตรวจสอบครั้งเดียว ❌ การเปรียบเทียบไฟล์ธรรมดาอาจเร็วกว่า

คู่มือการทำงาน: เปรียบเทียบหลายเอกสาร

ต่อไปนี้เป็นโค้ดเต็มที่พร้อมรัน ซึ่งแสดงวิธี compare multiple word files ด้วย streams และกำหนดสไตล์แบบกำหนดเอง

ขั้นตอนที่ 1: ตั้งค่า Streams และสร้าง Comparer

try (InputStream sourceStream = new FileInputStream("YOUR_DOCUMENT_DIRECTORY/SOURCE_WORD");
     InputStream target1Stream = new FileInputStream("YOUR_DOCUMENT_DIRECTORY/TARGET1_WORD");
     InputStream target2Stream = new FileInputStream("YOUR_DOCUMENT_DIRECTORY/TARGET2_WORD");
     InputStream target3Stream = new FileInputStream("YOUR_DOCUMENT_DIRECTORY/TARGET3_WORD");
     OutputStream resultStream = new FileOutputStream(outputFileName);
     Comparer comparer = new Comparer(sourceStream)) {

กำลังทำอะไรอยู่?
เราเปิด source stream (เอกสารอ้างอิง) และสาม target stream (เวอร์ชันที่ต้องการเปรียบเทียบ) Comparer จะถูกสร้างด้วย source stream ทำให้เป็นจุดอ้างอิงสำหรับการเปรียบเทียบต่อไปทั้งหมด

ขั้นตอนที่ 2: เพิ่ม Target Streams ทั้งหมดพร้อมกัน

comparer.add(target1Stream, target2Stream, target3Stream);

การเพิ่มหลายเป้าหมายในคำเรียกเดียวทำให้ประหยัดเวลาและทรัพยากรมากกว่าการเรียกเปรียบเทียบแยกไฟล์แต่ละไฟล์

ขั้นตอนที่ 3: รันการเปรียบเทียบพร้อมสไตล์กำหนดเอง

final Path resultPath = comparer.compare(resultStream,
        new CompareOptions.Builder()
                .setInsertedItemStyle(
                        new StyleSettings.Builder()
                                .setFontColor(Color.YELLOW)
                                .build())
                .build());

ที่นี่เราไม่เพียงทำการเปรียบเทียบเท่านั้น แต่ยังบอก GroupDocs ให้ไฮไลท์ข้อความที่แทรกด้วย สีเหลือง คุณสามารถกำหนดสีสำหรับการลบหรือการแก้ไขได้เช่นกัน

ตัวเลือกการสไตล์ขั้นสูง

หากต้องการรูปลักษณ์ที่ดูเป็นมืออาชีพมากขึ้น คุณสามารถกำหนด StyleSettings ที่ใช้ซ้ำได้

try (InputStream sourceStream = new FileInputStream("YOUR_DOCUMENT_DIRECTORY/SOURCE_WORD");
     InputStream target1Stream = new FileInputStream("YOUR_DOCUMENT_DIRECTORY/TARGET_WORD");
     OutputStream resultStream = new FileOutputStream(outputFileName);
     Comparer comparer = new Comparer(sourceStream)) {
final StyleSettings styleSettings = new StyleSettings();
styleSettings.setFontColor(Color.YELLOW);
CompareOptions compareOptions = new CompareOptions();
compareOptions.setInsertedItemStyle(styleSettings);
final Path resultPath = comparer.compare(resultStream, compareOptions);

เคล็ดลับการสไตล์

  • Insertions – พื้นหลังสีเหลืองช่วยให้สแกนได้เร็ว
  • Deletions – เส้นขีดฆ่าสีแดง (setDeletedItemStyle) ทำให้เห็นการลบชัดเจน
  • Modifications – ขีดเส้นใต้สีน้ำเงิน (setModifiedItemStyle) ทำให้เอกสารยังอ่านง่าย
  • หลีกเลี่ยงสีนีออน; ทำให้ตาเหนื่อยเมื่อตรวจสอบเป็นเวลานาน

ปัญหาที่พบบ่อยและการแก้ไข

ข้อผิดพลาดหน่วยความจำกับเอกสารขนาดใหญ่

ปัญหา: OutOfMemoryError
วิธีแก้: เพิ่ม heap ของ JVM หรือปรับแต่งบัฟเฟอร์ของ stream

java -Xms512m -Xmx2g YourApplication

ปัญหาเกี่ยวกับวงจรชีวิตของ Stream

  • “Stream closed” – ต้องสร้าง InputStream ใหม่สำหรับการเปรียบเทียบแต่ละครั้ง; stream ไม่สามารถใช้ซ้ำหลังจากอ่านแล้ว
  • การรั่วของทรัพยากร – บล็อก try‑with‑resources ปิด stream ให้แล้ว, แต่ควรตรวจสอบยูทิลิตี้ที่กำหนดเองด้วย

ฟอร์แมตที่ไม่รองรับ

ตรวจสอบให้แน่ใจว่าชื่อไฟล์ตรงกับฟอร์แมตจริง (เช่น .docx ที่เป็นไฟล์ docx จริง, ไม่ใช่ไฟล์ .txt ที่เปลี่ยนชื่อ)

คอขวดด้านประสิทธิภาพ

  • ใช้ SSD เพื่อเพิ่มความเร็ว I/O
  • เพิ่มขนาดบัฟเฟอร์ (ดูส่วนต่อไป)
  • ประมวลผลเป็นชุด 5‑10 เอกสารแบบขนานแทนการทำทั้งหมดพร้อมกัน

เคล็ดลับการเพิ่มประสิทธิภาพ

แนวทางการจัดการหน่วยความจำที่ดีที่สุด

// Use larger buffers for big files
BufferedInputStream bufferedSource = new BufferedInputStream(sourceStream, 32768);

การปรับจูน JVM สำหรับการผลิต

-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions

เมื่อ Streams อาจไม่จำเป็น

  • ไฟล์ < 1 MB บน SSD ที่เร็ว
  • การเปรียบเทียบง่าย ๆ ครั้งเดียวที่ค่าโอเวอร์เฮดของ stream มากกว่าประโยชน์

การใช้งานในโลกจริง

ด้าน วิธีที่ Stream Comparison ช่วย
Legal เปรียบเทียบสัญญาหลักกับเวอร์ชันเฉพาะของลูกค้าหลายสิบฉบับ, ไฮไลท์การแทรกสีเหลืองเพื่อรีวิวเร็ว
Software Docs ติดตามการเปลี่ยนแปลงเอกสาร API ระหว่างเวอร์ชัน; เปรียบเทียบหลายเวอร์ชันใน pipeline ของ CI
Publishing บรรณาธิการเห็นความแตกต่างระหว่างร่างต้นฉบับจากผู้ร่วมเขียนหลายคน
Compliance ผู้ตรวจสอบยืนยันการอัปเดตนโยบายในหลายแผนกโดยไม่ต้องโหลด PDF ทั้งไฟล์เข้าสู่หน่วยความจำ

เคล็ดลับระดับ Pro เพื่อความสำเร็จ

  • ตั้งชื่อให้สอดคล้อง – ใส่หมายเลขเวอร์ชันหรือวันที่ในชื่อไฟล์
  • ทดสอบด้วยข้อมูลจริง – ไฟล์ “Lorem ipsum” อาจซ่อนกรณีขอบที่สำคัญ
  • ตรวจสอบหน่วยความจำ – ใช้ JMX หรือ VisualVM ในการผลิตเพื่อตรวจจับสปายค์ได้เร็ว |
  • จัดชุดเป็นกลุ่ม – ทำงานเป็นกลุ่ม 5‑10 เอกสารต่องานเพื่อสมดุลระหว่าง throughput และหน่วยความจำ
  • จัดการข้อผิดพลาดอย่างอ่อนโยน – ดัก UnsupportedFormatException แล้วแจ้งผู้ใช้ด้วยข้อความที่ชัดเจน

คำถามที่พบบ่อย

Q: เวอร์ชัน JDK ขั้นต่ำคืออะไร?
A: Java 8 เป็นขั้นต่ำ, แต่แนะนำ Java 11+ เพื่อประสิทธิภาพและความปลอดภัยที่ดีกว่า

Q: จะจัดการกับเอกสารขนาดใหญ่มากอย่างไร?
A: ใช้วิธี stream‑based ตามที่แสดง, เพิ่ม heap ของ JVM (-Xmx), และพิจารณาเพิ่มขนาดบัฟเฟอร์

Q: สามารถสไตล์การลบและการแก้ไขได้หรือไม่?
A: ได้. ใช้ setDeletedItemStyle() และ setModifiedItemStyle() บน CompareOptions เพื่อกำหนดสี, ฟอนต์ หรือการขีดฆ่า

Q: วิธีนี้เหมาะกับการทำงานร่วมกันแบบเรียลไทม์หรือไม่?
A: Stream comparison เหมาะกับการประมวลผลเป็นชุดและการตรวจสอบ. ตัวแก้ไขแบบเรียลไทม์มักต้องการวิธี diff ที่เบากว่า

Q: จะเปรียบเทียบไฟล์ที่เก็บใน AWS S3 อย่างไร?
A: ดึง InputStream ผ่าน AWS SDK (s3Client.getObject(...).getObjectContent()) แล้วส่งต่อให้ Comparer โดยตรง

แหล่งข้อมูลเพิ่มเติม


อัปเดตล่าสุด: 2026-01-18
ทดสอบกับ: GroupDocs.Comparison 25.2
ผู้เขียน: GroupDocs