JavaRush /จาวาบล็อก /Random-TH /รูปแบบการทำให้เป็นอนุกรมใน Java

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

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

เจสัน

สัญกรณ์วัตถุ JavaScript คุณคุ้นเคยกับเขาแล้วนิดหน่อย! เราได้พูดคุยเกี่ยวกับเรื่องนี้ในการบรรยายครั้งนี้และเราดูที่การทำให้เป็นอนุกรมใน JSON ที่นี่ มันได้ชื่อมาด้วยเหตุผล อ็อบเจ็กต์ Java ที่แปลงเป็น JSON จริงๆ แล้วมีลักษณะเหมือนกับอ็อบเจ็กต์ JavaScript ทุกประการ คุณไม่จำเป็นต้องรู้ JavaScript เพื่อเข้าใจความหมายของวัตถุของเรา:
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
ไม่จำเป็นต้องผ่านวัตถุชิ้นเดียว JSON ยังสามารถประกอบด้วยอาร์เรย์ของอ็อบเจ็กต์ได้:
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

 {
   "title": "Бесы",
   "author": "Федор Достоевский",
   "year": 1872
 },

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

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

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

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

YAML

ในช่วงเริ่มต้นของการดำรงอยู่ มันย่อมาจาก Yet Another Markup Language - "ภาษามาร์กอัปอื่น" ในขณะนั้นถูกวางตำแหน่งให้เป็นคู่แข่งของ XML เมื่อเวลาผ่านไป คำนี้ย่อมาจาก “YAML Ain't Markup Language” (“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. ความสามารถในการใช้สมอและนามแฝง

    การแปลคำว่า "anchor" และ "alias" - "anchor" และ "pseudonym" โดยหลักการแล้ว YAML อธิบายสาระสำคัญของคำเหล่านี้ได้ค่อนข้างแม่นยำ

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

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

    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

    เมื่อเราอ่านไฟล์นี้ด้วย parser ค่า "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)

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

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

ในบางสถานการณ์ เราจำเป็นต้องลดปริมาณข้อมูลที่ถ่ายโอนลงอย่างมาก (เช่น หากมีข้อมูลจำนวนมากและเราจำเป็นต้องลดภาระ) ในสถานการณ์นี้ เราสามารถใช้โปรโตคอลตามตำแหน่งนั่นคือส่งค่าพารามิเตอร์โดยไม่มีชื่อของพารามิเตอร์เอง
"Leo Tolstoy" | "Anna Karenina" | 1873
ข้อมูลในรูปแบบนี้ใช้พื้นที่น้อยกว่าไฟล์ JSON ที่มีคุณสมบัติครบถ้วนมาก แน่นอนว่ายังมีรูปแบบการทำให้เป็นอนุกรมอื่นๆ อยู่ แต่คุณไม่จำเป็นต้องรู้ทั้งหมดในตอนนี้ :) เป็นการดีที่จะทำความคุ้นเคยกับรูปแบบที่เป็นมาตรฐานอุตสาหกรรมสำหรับการพัฒนาแอปพลิเคชันในปัจจุบัน และจดจำข้อดีและความแตกต่างระหว่างกัน . และการบรรยายของเราสิ้นสุดลงแล้ว :) อย่าลืมแก้ปัญหาสองสามข้อในวันนี้! แล้วพบกันอีก! :)
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION