XMLStreamReader
-> Местоположение имеет метод под названием getCharacterOffset()
.XMLStreamReader: получить смещение символов: XML из файла
К сожалению, Javadocs указывает, что это неоднозначно названный метод: он также может возвращать смещение байта (и это на практике кажется истинным); это, кажется, беспомощно возникает при чтении из файлов (например):
The Javadoc состояния:
Верните байты или символы смещения в источник входного сигнала это местоположения, указывающий на. Если источником входного сигнала является файл или байтовый поток , то это смещение байта в этот поток, но если входной источник является символом , то, то смещение является смещением символов. (выделено мной)
Мне очень нужен символ смещение; и я уверен, что мне дают байт смещение.
XML-код (кодированный UTF-8) содержится в (частично поврежденном 1G) файле. [Следовательно, необходимо использовать API нижнего уровня, который не жалуется на отсутствие правильной формы, пока у него действительно нет выбора, кроме как].
Вопрос
Что означает Javadoc, когда он говорит: «... источник входного сигнала является символом СМИ ...»: как я могу заставить его думать о моем входном файле как „характер“ СМИ - чтобы получить точный (характерный) смещение, а не смещение байта?
Extra-бла-бла:
[Я уверен, что это то, что происходит - когда я раздеть файл на части (с использованием некоторых известных тегов высокого уровня) я получаю несколько символов отсутствующих или дополнительных - неаккуратным способом - я откладываю разницу до нескольких многобайтовых символов, сбрасывающих счетчик: также когда я копирую (используя «head»/«tail», например, в Powershell - этот инструмент выглядит правильно признают [или предполагают UTF-8] и делают хорошее преобразование в UTF-16, насколько я вижу]
При работе с потоком байт (XMLInputFactory.newInstance(). CreateXMLEventReader (новый FileInputStream (...))), является ли проблема, что возвращаемый тип getCharacterOffset() является int, но файл (в байтах) может быть файлом длинного размера в соответствии с File.length(), который возвращает long? –