Я работаю над куском кода для разделения файлов.
Я хочу разделить плоский файл (это нормально, работает нормально) и XML-файл.
Идея состоит в том, чтобы разделить на основе нескольких файлов для разделения:
У меня есть файл, и я хочу разделить его на х файлов (х это параметры).
Я делю разделение, беря размер файла и деля размер по количеству файлов для разделения.
Затем mysolution должен был использовать BufferedReader и использовать его как
while ((n = reader.read(buffer, 0, buffer.length)) != -1) {
{
Основная проблема заключается в том, что для файла xml я не могу просто разделить его, но мне нужно разделить его на основе блока, разделенного начальным тегом xml и конечным тегом xml:
<start tag>
bla bla xml stuff
</end tag>
Так что я не могу разрезать блок в середине. Поэтому, если размер моего нового файла больше половины моего максимума, когда я нахожусь на половине блока, мне придется читать до конца тега, а затем начинать следующий файл.
Проблема в том, что у меня есть все виды случаев, и немного сложно найти конечный тег.
- блок читает текст до середины конечного тега
- блок читает текст до конца конечного тега, а другой символ после
- так далее
и в то же время иметь цикл и читать следующий блок.
Иногда конец блока, соединенного с началом следующего, у меня есть тег end xml.
Я надеюсь, вы поняли идею.
У меня вопрос: есть ли у кого-нибудь алгоритм, который делает это более точным, и кто мне лечит все особые случаи?
Идея состоит в том, чтобы разбить файл как можно быстрее.
Я не хотел использовать lib для обработки файла как xml-файла, потому что размер блока будет меньше или очень велик, и я не знаю, хватит ли памяти. Или есть какая-то библиотека, которая не загружает все в память?
Большое спасибо.
Ниже приведен пример моего 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-файл мог быть записан в первой строке,
поэтому я не могу догадаться, что одна строка имеет один тег.