โค้ดยิม/จาวาบล็อก/สุ่ม/รูปแบบการทำให้เป็นอันดับของ Java
John Squirrels
ระดับ
San Francisco

รูปแบบการทำให้เป็นอันดับของ Java

เผยแพร่ในกลุ่ม
สวัสดี! พูดคุยเกี่ยวกับการทำให้เป็นอนุกรม คุณคงจำได้ว่าเราเคยเรียนเรื่องซีเรียลไลเซชันมาแล้ว และเราก็ทำ :) นี่คืออันแรกและนี่คืออันที่สอง. หากคุณจำไม่ได้ว่าการทำให้เป็นอนุกรมทำงานอย่างไร เหตุใดจึงต้องทำให้เป็นอนุกรม และเครื่องมือใดที่ Java มีสำหรับการทำให้เป็นอนุกรม คุณสามารถอ่านบทเรียนเหล่านี้ได้ บทเรียนวันนี้จะเกี่ยวกับทฤษฎี เราจะพิจารณารูปแบบการทำให้เป็นอนุกรมให้ละเอียดยิ่งขึ้น อันดับแรก เรามานึกถึงว่าการทำให้เป็นอนุกรมคืออะไร การทำให้เป็นอนุกรมเป็นกระบวนการจัดเก็บสถานะของวัตถุในลำดับของไบต์ การดีซีเรียลไลเซชันเป็นกระบวนการกู้คืนอ็อบเจ็กต์จากไบต์เหล่านี้ อ็อบเจ็กต์ Java สามารถทำให้เป็นอนุกรมและส่งผ่านเครือข่ายได้ (เช่น ไปยังคอมพิวเตอร์เครื่องอื่น) ลำดับของไบต์สามารถแสดงในรูปแบบต่างๆ คุณคุ้นเคยกับแนวคิดนี้จากการใช้คอมพิวเตอร์ทั่วไป ตัวอย่างเช่น หนังสืออิเล็กทรอนิกส์ (หรือเอกสารข้อความอย่างง่าย) สามารถเขียนได้หลายรูปแบบ:
  • docx (รูปแบบ Microsoft Word);
  • pdf (รูปแบบ Adobe);
  • mobi (ใช้กันทั่วไปในอุปกรณ์ Amazon Kindle);
  • และอีกมากมาย (ePub, djvu, fb2 ฯลฯ)
ในแต่ละกรณี วัตถุประสงค์ดูเหมือนจะเหมือนกัน: นำเสนอข้อความในรูปแบบที่มนุษย์สามารถอ่านได้ ถึงกระนั้นผู้คนก็คิดค้นรูปแบบที่แตกต่างกันมากมาย เราสามารถสรุปได้ว่าพวกเขามีเหตุผลที่ดี แต่ละรูปแบบมีข้อดีและข้อเสียของตัวเองเมื่อเทียบกับรูปแบบอื่นๆ อาจมีการสร้างรูปแบบการทำให้เป็นอนุกรมต่างๆ ตามหลักการเดียวกันนี้หรือไม่ เดาได้เยี่ยม นักเรียน! :) ถูกต้องแล้วครับ ความจริงคือการส่งข้อมูลผ่านสาย (หรือแบบไร้สาย) เป็นเรื่องยุ่งยาก และเกี่ยวข้องกับปัจจัยหลายอย่าง ใครเป็นผู้ส่งข้อมูล สถานที่ที่จะ? ปริมาณอะไร? ผู้รับจะเป็นมนุษย์หรือคอมพิวเตอร์ (เช่น ข้อมูลควรเป็นแบบที่มนุษย์อ่านได้)? อุปกรณ์ใดจะอ่านข้อมูล เห็นได้ชัดว่าสถานการณ์เหล่านี้แตกต่างกัน การส่งภาพขนาด 500 KB จากสมาร์ทโฟนเครื่องหนึ่งไปยังอีกเครื่องหนึ่งก็เป็นเรื่องหนึ่ง และเป็นสิ่งที่แตกต่างไปจากเดิมอย่างสิ้นเชิงหากเรากำลังพูดถึงข้อมูลธุรกิจขนาด 500 เทราไบต์ที่ต้องได้รับการบีบอัดอย่างเหมาะสมและส่งโดยเร็วที่สุด มาทำความคุ้นเคยกับรูปแบบการทำให้เป็นอนุกรมหลักและพิจารณาข้อดีและข้อเสียของแต่ละรูปแบบ!

เจสัน

สัญกรณ์วัตถุ JavaScript คุณรู้เรื่องรูปแบบนี้มาบ้างแล้ว! เราได้พูดคุยเกี่ยวกับเรื่องนี้ในบทเรียนนี้และเราได้กล่าวถึงการทำให้เป็นอันดับเป็น JSON ที่นี่ มันมีชื่อด้วยเหตุผล วัตถุ Java ที่แปลงเป็น JSON มีลักษณะเหมือนวัตถุใน JavaScript ทุกประการ คุณไม่จำเป็นต้องรู้ JavaScript เพื่อทำความเข้าใจวัตถุของเรา:
{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
เราไม่จำกัดเพียงการส่งอ็อบเจกต์เดียว รูปแบบ JSON ยังสามารถแสดงอาร์เรย์ของวัตถุ:
[
 {
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
 },

 {
   "title": "Demons",
   "author": "Fyodor Dostoyevsky",
   "year": 1872
 },

 {
   "title": "The Seagull",
   "author": "Anton Chekhov",
   "year": 1896
 }
]
เนื่องจาก JSON เป็นตัวแทนของวัตถุ JavaScript จึงสนับสนุนรูปแบบข้อมูล JavaScript ต่อไปนี้:
  • สตริง;
  • ตัวเลข;
  • วัตถุ;
  • อาร์เรย์;
  • บูลีน (จริงและเท็จ);
  • โมฆะ.
JSON มีประโยชน์อย่างไร?
  1. รูปแบบที่มนุษย์อ่านได้ นี่เป็นข้อได้เปรียบที่ชัดเจนหากผู้ใช้ปลายทางของคุณเป็นมนุษย์ ตัวอย่างเช่น สมมติว่าเซิร์ฟเวอร์ของคุณมีฐานข้อมูลพร้อมตารางเที่ยวบิน ลูกค้าที่เป็นมนุษย์นั่งอยู่ที่คอมพิวเตอร์ที่บ้าน ขอข้อมูลจากฐานข้อมูลนี้โดยใช้เว็บแอปพลิเคชัน เนื่องจากคุณต้องให้ข้อมูลในรูปแบบที่เขาเข้าใจได้ JSON จึงเป็นโซลูชันที่ยอดเยี่ยม

  2. ความเรียบง่าย มันง่ายมาก :) ด้านบน เราได้ยกตัวอย่างไฟล์ JSON สองไฟล์ และแม้ว่าคุณจะไม่เคยได้ยินเกี่ยวกับ JavaScript (ไม่ต้องพูดถึงวัตถุ JavaScript) คุณก็สามารถเข้าใจประเภทของวัตถุที่อธิบายไว้ได้อย่างง่ายดาย
    เอกสารประกอบ JSON ทั้งหมดประกอบด้วยหน้าเว็บที่มีรูปภาพสองสามภาพ

  3. การใช้งานอย่างแพร่หลาย JavaScript เป็นภาษาส่วนหน้าที่โดดเด่นและมีข้อกำหนดของตนเอง การใช้ JSON เป็นสิ่งจำเป็น ดังนั้น บริการเว็บจำนวนมากจึงใช้ JSON เป็นรูปแบบการแลกเปลี่ยนข้อมูล IDE สมัยใหม่ทุกอันรองรับรูปแบบ JSON (รวมถึง IntelliJ IDEA) มีการเขียนไลบรารีมากมายสำหรับภาษาโปรแกรมทุกประเภทเพื่อให้สามารถทำงานกับ JSON ได้

ตัวอย่างเช่น คุณเคยทำงานกับไลบรารีของ Jackson ในบทเรียนที่เราได้เรียนรู้วิธีทำให้วัตถุ Java เป็นอนุกรมเป็น JSON แต่นอกจากแจ็คสันแล้ว เรายังมีGSONซึ่งเป็นห้องสมุดที่สะดวกมากจาก Google

ย.ม

ในขั้นต้น YAML ย่อมาจาก "Yet Another Markup Language" เมื่อมันเริ่มต้น มันถูกกำหนดให้เป็นคู่แข่งของ XML เมื่อเวลาผ่านไป YAML มีความหมายว่า "YAML ไม่ใช่ภาษามาร์กอัป" มันคืออะไรกันแน่? ลองจินตนาการว่าเราต้องสร้างคลาส 3 คลาสเพื่อเป็นตัวแทนของตัวละครในเกมคอมพิวเตอร์: Warrior, Mage และ Thief พวกเขาจะมีลักษณะดังต่อไปนี้: ความแข็งแกร่ง ความว่องไว ความอดทน ชุดของอาวุธ ไฟล์ YAML ที่อธิบายชั้นเรียนของเราจะมีลักษณะดังนี้:
classes:
 class-1:
   title: Warrior
   power: 8
   agility: 4
   stamina: 7
   weapons:
     - sword
     - spear

 class-2:
   title: Mage
   power: 5
   agility: 7
   stamina: 5
   weapons:
     - magic staff

 class-3:
   title: Thief
   power: 6
   agility: 6
   stamina: 5
   weapons:
     - dagger
     - poison
ไฟล์ YAML มีโครงสร้างแบบต้นไม้: องค์ประกอบบางอย่างซ้อนอยู่ในองค์ประกอบอื่นๆ เราสามารถควบคุมการซ้อนโดยใช้ช่องว่างจำนวนหนึ่งซึ่งเราใช้เพื่อแสดงแต่ละระดับ ข้อดีของรูปแบบ YAML คืออะไร
  1. มนุษย์อ่านได้ อีกครั้ง แม้จะเห็นไฟล์ YAML โดยไม่มีคำอธิบาย คุณก็สามารถเข้าใจวัตถุที่อธิบายได้อย่างง่ายดาย YAML นั้นมนุษย์สามารถอ่านได้โดยที่เว็บไซต์yaml.orgเป็นไฟล์ YAML ธรรมดา :)

  2. ความกะทัดรัด โครงสร้างไฟล์ถูกสร้างขึ้นโดยใช้ช่องว่าง: ไม่จำเป็นต้องใช้วงเล็บหรือเครื่องหมายอัญประกาศ

  3. รองรับโครงสร้างข้อมูลดั้งเดิมสำหรับภาษาโปรแกรม ข้อดีอย่างมากของ YAML เหนือ JSON และรูปแบบอื่นๆ คือ รองรับโครงสร้างข้อมูลที่หลากหลาย พวกเขารวมถึง:

    • !!map
      ชุดของคู่คีย์-ค่าที่ไม่มีลำดับซึ่งไม่สามารถซ้ำกันได้

    • !!omap
      ลำดับของคู่คีย์-ค่าที่ไม่สามารถซ้ำกันได้

    • !!pairs:
      ลำดับของคู่คีย์-ค่าที่สามารถมีซ้ำได้

    • !!set
      ลำดับที่ไม่มีลำดับของค่าที่ไม่เท่ากัน

    • !!seq
      ลำดับของค่าโดยพลการ;

    คุณจะรู้จักโครงสร้างเหล่านี้บางส่วนจาก Java! :) ซึ่งหมายความว่าโครงสร้างข้อมูลต่างๆ จากภาษาการเขียนโปรแกรมสามารถจัดลำดับเป็น YAML ได้

  4. ความสามารถในการใช้สมอเรือและนามแฝง

    เครื่องหมายเหล่านี้ทำให้คุณสามารถระบุองค์ประกอบบางอย่างในไฟล์ YAML แล้วอ้างอิงถึงองค์ประกอบในส่วนที่เหลือของไฟล์หากเกิดขึ้นซ้ำๆ สมอถูกสร้างขึ้นโดยใช้สัญลักษณ์&และสร้างนามแฝงโดยใช้*

    สมมติว่าเรามีไฟล์ที่อธิบายถึงหนังสือของลีโอ ตอลสตอย เพื่อหลีกเลี่ยงการเขียนชื่อผู้แต่งสำหรับหนังสือแต่ละเล่ม เราเพียงสร้าง leo anchor และอ้างถึงโดยใช้นามแฝงเมื่อเราต้องการ:

    books:
     book-1:
       title: War and Peace
       author: &leo Leo Tolstoy
       year: 1869
    
     book-2:
       title: Anna Karenina
       author: *leo
       year: 1873
    
     book-3:
       title: Family Happiness
       author: *leo
       year: 1859

    เมื่อแยกวิเคราะห์ไฟล์นี้ ค่า "Leo Tolstoy" จะถูกแทนที่ในตำแหน่งที่ถูกต้องที่เรามีชื่อแทน

  5. YAML สามารถฝังข้อมูลในรูปแบบอื่นได้ ตัวอย่างเช่น JSON:

    books: [
            {
              "title": "War and Peace",
              "author": "Leo Tolstoy",
              "year": 1869
            },
    
            {
              "title": "Anna Karenina",
              "author": "Leo Tolstoy",
              "year": 1873
            },
    
            {
              "title": "Family Happiness",
              "author": "Leo Tolstoy",
              "year": 1859
            }
          ]

รูปแบบการทำให้เป็นอนุกรมอื่นๆ

XML

รูปแบบนี้อิงตามแผนผังแท็ก
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
แต่ละองค์ประกอบประกอบด้วยแท็กเปิดและแท็กปิด (<> และ </>) แต่ละองค์ประกอบสามารถมีองค์ประกอบที่ซ้อนกันได้ XML เป็นรูปแบบทั่วไปที่ดีพอๆ กับ JSON และ YAML (หากเรากำลังพูดถึงโครงการจริง) เรามีบทเรียนแยกต่างหากเกี่ยวกับ XML .

BSON (ไบนารี JSON)

ตามชื่อของมัน BSON คล้ายกับ JSON มาก แต่มนุษย์ไม่สามารถอ่านได้และใช้ข้อมูลไบนารี ด้วยเหตุนี้ จึงเหมาะสำหรับการจัดเก็บและถ่ายโอนรูปภาพและไฟล์แนบอื่นๆ นอกจากนี้ BSON ยังรองรับข้อมูลบางประเภทที่ไม่มีใน JSON ตัวอย่างเช่น ไฟล์ BSON สามารถรวมวันที่ (ในรูปแบบมิลลิวินาที) หรือแม้แต่รหัส JavaScript ฐานข้อมูล MongoDB NoSQL ยอดนิยมเก็บข้อมูลในรูปแบบ BSON

โปรโตคอลตามตำแหน่ง

ในบางสถานการณ์ เราจำเป็นต้องลดปริมาณข้อมูลที่ส่งลงอย่างมาก (เช่น หากเรามีข้อมูลจำนวนมากและจำเป็นต้องลดการโหลด) ในสถานการณ์นี้ เราสามารถใช้โปรโตคอลตามตำแหน่งได้ นั่นคือ ส่งค่าพารามิเตอร์โดยไม่ใช้ชื่อของพารามิเตอร์เอง
"Leo Tolstoy" | "Anna Karenina" | 1873
ข้อมูลในรูปแบบนี้ใช้พื้นที่น้อยกว่าไฟล์ JSON แบบเต็มหลายเท่า แน่นอนว่ามีรูปแบบซีเรียลไลเซชันอื่นๆ อีก แต่คุณไม่จำเป็นต้องรู้ทั้งหมดในตอนนี้ :) จะเป็นการดีถ้าคุณคุ้นเคยกับรูปแบบมาตรฐานอุตสาหกรรมปัจจุบันเมื่อพัฒนาแอปพลิเคชัน และจดจำข้อดีและความแตกต่างของรูปแบบดังกล่าว อื่น. และด้วยเหตุนี้บทเรียนของเราก็จบลง :) วันนี้อย่าลืมแก้งานสองอย่าง! จนกว่าจะถึงครั้งต่อไป! :)
ความคิดเห็น
  • เป็นที่นิยม
  • ใหม่
  • เก่า
คุณต้องลงชื่อเข้าใช้เพื่อแสดงความคิดเห็น
หน้านี้ยังไม่มีความคิดเห็นใด ๆ