ฉันกำลังทำงานร่วมกับระบบของบริษัทอื่นที่ให้บริการไฟล์เสียงและข้อมูลต่างๆ เกี่ยวกับไฟล์เสียง ปัญหาที่ฉันกำลังเผชิญคือชิ้นส่วนของข้อมูลเป็นออบเจ็กต์ JSON ซึ่ง สุ่มโดยพื้นฐาน ทั่วทั้งข้อมูลไบนารี่ของไฟล์เสียง
ไม่มีการให้ข้อมูลว่า JSON อยู่ที่ไหนและข้อมูลไบนารีอยู่
ดังนั้นวิธีหนึ่งในการจัดการกับสิ่งนี้คือเพียงแค่เข้าไปดูไฟล์ และทุกครั้งที่ฉันพบ {
ฉันจะพยายามแยกอ็อบเจ็กต์ json จากจุดนั้น ถ้าฉันประสบความสำเร็จ ฉันจะเก็บออบเจ็กต์ที่แยกวิเคราะห์และดำเนินการต่อ ไม่เช่นนั้นฉันจะพิจารณาข้อมูลไบนารี {
และเพิ่มลงในคิวเสียง
ฉันมักจะใช้ JSON.Net สำหรับเนื้อหา JSON ของฉัน ถ้าฉันใช้ JsonTextReader
กับอินพุตสตรีม ฉันสามารถแยกวิเคราะห์จากตำแหน่งในอาร์เรย์และรับสิ่งที่ต้องการได้ จากนั้นฉันจะเริ่มอ่านอีกครั้งจากไบต์หลังจากปิด }
อย่างไรก็ตาม JsonTextReader
จะอ่านเป็นชิ้นใหญ่ในแต่ละครั้ง ดังนั้นเมื่อฉันตรวจสอบตำแหน่งของกระแสที่อ้างอิงอยู่ ตำแหน่งของกระแสนั้นอยู่เลยจุดปิด }
JsonTextReader
ไม่มีคุณสมบัติใด ๆ ที่เกี่ยวข้องกับตำแหน่ง นอกเหนือจากคุณสมบัติ Line และ Char ซึ่งจะยุ่งยากในการใช้งาน อย่างไรก็ตาม มีสมาชิกส่วนตัว _charPos
ที่จะมอบสิ่งที่ฉันต้องการให้กับฉันอย่างแน่นอน
มีทางเลือกอื่นในการรับข้อมูลนั้น โดยไม่ต้องแก้ไขไลบรารี โดยไม่ต้องคำนวณหมายเลขบรรทัดด้วยตัวเอง หรือใช้การสะท้อนกลับเพื่อเข้าถึงสมาชิกส่วนตัวหรือไม่
IJsonLineInfo
ก็เหมือนกับIXmlLineInfo
โดยจะให้หมายเลขบรรทัดและตำแหน่ง แต่ไม่ใช่ ดัชนีอักขระซึ่งจะทำให้มนุษย์อ่านได้น้อยลง แต่มีประโยชน์มากกว่าในทางปฏิบัติ_charPos
ไม่ใช่สิ่งที่คุณต้องการ แต่เป็นดัชนีในบัฟเฟอร์_chars
- person dbc   schedule 01.11.2018