ฉันกำลังเขียนโค้ดเพื่อแยกไฟล์ ฉันต้องการแยกไฟล์แฟลต (ไม่เป็นไร มันทำงานได้ดี) และไฟล์ xml แนวคิดคือการแบ่งตามไฟล์จำนวนหนึ่งที่จะแยก: ฉันมีไฟล์และฉันต้องการแยกออกเป็นไฟล์ x (x คือพารามิเตอร์) ฉันกำลังแยกไฟล์โดยใช้ขนาดของไฟล์และแบ่งขนาดตามจำนวนไฟล์ที่จะแยก จากนั้นวิธีแก้ปัญหาของฉันคือใช้ BufferedReader และใช้งานเช่นนั้น
while ((n = reader.read(buffer, 0, buffer.length)) != -1) {
{
ปัญหาหลักคือสำหรับไฟล์ xml ฉันไม่สามารถแยกมันได้ แต่ฉันต้องแยกมันตามบล็อกที่คั่นด้วยแท็ก start xml และแท็ก xml สิ้นสุด:
<start tag>
bla bla xml stuff
</end tag>
ดังนั้นฉันจึงไม่สามารถตัดบล็อกที่อยู่ตรงกลางได้ ดังนั้นหากเมื่อฉันอยู่ที่ครึ่งบล็อก ขนาดของไฟล์ใหม่ของฉันมากกว่าขนาดสูงสุดของฉัน ฉันจะต้องอ่านจนจบแท็ก จากนั้นจึงจะเริ่มไฟล์ถัดไป
ปัญหาคือฉันมีเคสทุกประเภท และการค้นหาแท็กปิดท้ายค่อนข้างยาก - บล็อกอ่านข้อความจนถึงกึ่งกลางของแท็กปิดท้าย - บล็อกอ่านข้อความจนถึงจุดสิ้นสุดของแท็กปิดท้าย และไม่มีคาแรคเตอร์อื่นตามมาอีก - ฯลฯ และในเวลาเดียวกันก็จะมีการวนซ้ำและอ่านบล็อกถัดไป บางครั้งจุดสิ้นสุดของบล็อกที่ต่อกับจุดเริ่มต้นของบล็อกถัดไป ฉันมีแท็ก end xml ฉันหวังว่าคุณจะเข้าใจความคิด
คำถามของฉันคือมีใครบ้างที่มีอัลกอริธึมที่แม่นยำกว่านี้และใครที่ฉันปฏิบัติต่อกรณีพิเศษทั้งหมด
แนวคิดก็คือการแบ่งไฟล์ให้เร็วที่สุด ฉันไม่ต้องการใช้ lib เพื่อรักษาไฟล์เป็นไฟล์ xml เนื่องจากขนาดของบล็อกแคนด์เล็กกว่าหรือใหญ่มาก และฉันไม่รู้ว่าหน่วยความจำจะเพียงพอหรือไม่ หรือมี lib บางตัวที่ไม่โหลดทั้งหมดในหน่วยความจำ?
ขอบคุณมาก.
ด้านล่างนี้เป็นตัวอย่างไฟล์ xml ของฉัน
<?xml version="1.0" encoding="UTF-8" ?>
<myTag service="toto" version="1.5.18" >
<endOfPeriodTradeNotification version="1.5.18">
.............
</endOfPeriodTradeNotification>
<endOfPeriodTradeNotification version="1.5.18">
.............
</endOfPeriodTradeNotification>
<endOfPeriodTradeNotification version="1.5.18">
.............
</endOfPeriodTradeNotification>
<inventoryDate>2009-12-31</inventoryDate>
<!-- reporting date -->
<processingDate>2010-01-29T00:00:00</processingDate>
</myTag>
ฉันลืมไปอย่างหนึ่ง: ไฟล์ xml ของฉันสามารถเขียนไว้ที่บรรทัดแรกทั้งหมดได้ ดังนั้นฉันจึงเดาไม่ได้เลยว่าบรรทัดหนึ่งมีแท็กเดียว