1. บทนำ
ในบทช่วยสอนนี้เราจะพูดถึงการแยกคลาส Java เมื่อไม่มีซอร์สโค้ดการถอดรหัสคลาส Java จะช่วยในการดีบักและทำความเข้าใจลักษณะการทำงานของซอร์สโค้ด
ลองมาดูตัวเลือกต่างๆที่มีให้
2. แยกย่อยใน IDE
เนื่องจากการพัฒนาส่วนใหญ่ทำในสภาพแวดล้อมการพัฒนาแบบบูรณาการ (IDE) จึงทำให้รู้สึกว่าการแยกส่วนควรเกิดขึ้นใน IDE
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ IDE ที่เราจะดำเนินการโปรดดูบทความของเราเกี่ยวกับวิธีการดีบักใน Eclipse และการกำหนดค่าสำหรับ IntelliJ IDEA
2.1. คราส
ประการแรกใน Eclipse เราต้องมีปลั๊กอินเช่น Enhanced Class Decompiler (ECD) ปลั๊กอินนี้ใช้ตัวถอดรหัสห้าแบบที่แตกต่างกัน เราสามารถติดตั้งได้จาก Eclipse Marketplace จากนั้นเราต้องรีสตาร์ท Eclipse
ถัดไป ECD ต้องการการตั้งค่าเล็กน้อยเพื่อเชื่อมโยงไฟล์คลาสกับ Class Decompiler Viewer:

นอกจากนี้เราต้องเชื่อมโยงไฟล์“ .class ที่ไม่มีซอร์ส”:

ในที่สุดเราสามารถใช้ตัวถอดรหัสได้โดยกดCtrl + คลิกซ้ายที่ชื่อคลาส เราเห็นตัวถอดรหัสที่ใช้บนแท็บไฟล์ในวงเล็บ
ในตัวอย่างนี้เราใช้ FernFlower:

2.2. IntelliJ IDEA
ในทางตรงกันข้ามกับคราสIntelliJ IDEA ให้ Decompiler FernFlower เป็นค่าเริ่มต้น
ในการใช้งานเราเพียงแค่Ctrl + คลิกซ้ายที่ชื่อคลาสและดูรหัส:

นอกจากนี้เราสามารถดาวน์โหลดแหล่งที่มา การดาวน์โหลดแหล่งที่มาจะให้รหัสจริงและความคิดเห็น
ยกตัวอย่างเช่นตัวแทนระดับคำอธิบายประกอบจากภาพหน้าจอดังกล่าวข้างต้นรวมถึง Javadoc ในการใช้งานของชิ้นส่วน เราสังเกตได้ถึงความแตกต่าง:

แม้ว่าการแยกส่วนจะมีประโยชน์มาก แต่ก็ไม่ได้ให้ภาพที่สมบูรณ์เสมอไป ซอร์สโค้ดแบบเต็มทำให้เราเห็นภาพที่สมบูรณ์
3. การแยกคอมไพล์บรรทัดคำสั่ง
ก่อนปลั๊กอิน IDE บรรทัดคำสั่งถูกใช้สำหรับการถอดรหัสคลาส ตัวถอดรหัสบรรทัดคำสั่งยังมีประโยชน์สำหรับการดีบัก Java bytecode บนเซิร์ฟเวอร์ระยะไกลที่ไม่สามารถเข้าถึงได้ด้วย IDE หรือ GUI
ตัวอย่างเช่นเราสามารถถอดรหัสด้วย JDCommandLine โดยใช้คำสั่ง jar ง่ายๆ:
java -jar JDCommandLine.jar ${TARGET_JAR_NAME}.jar ./classes
อย่าทิ้งพารามิเตอร์. / class ไว้ กำหนดไดเร็กทอรีเอาต์พุต
หลังจากการแยกคอมไพล์สำเร็จเราสามารถเข้าถึงไฟล์ต้นฉบับที่อยู่ในไดเร็กทอรีเอาต์พุต ตอนนี้พวกเขาพร้อมที่จะดูผ่านโปรแกรมแก้ไขข้อความเช่น Vim
4. สรุป
เราดูการแยกส่วนใน Eclipse และ IntelliJ IDEA IDEs รวมถึงตัวเลือกบรรทัดคำสั่งเมื่อไม่พร้อมใช้งาน
นอกจากนี้เรายังดูความแตกต่างระหว่างการเชื่อมโยงซอร์สโค้ดและการถอดรหัส