libxml2 の sax パーサーを使用して、大きな xml ファイルを読み取っています。ほとんどのコールバック ハンドラには、NULL で終了する char ポインタが提供されます。これらを使用String.fromCString
すると、Swift で通常の文字列に変換できます。ただし、sax はバイトの読み取りにバッファーを使用するため、コールバックの 1 つ ( characters
) が文字列の一部、つまりバッファーのサイズで呼び出される場合があります。この部分的な文字列は、Unicode コード ポイントの途中で開始/終了することさえあります。完全な文字列が (チャンクで) 提供されるまで、コールバックは複数回呼び出されます。
完全な文字列が組み立てられるまですべてのチャンクを連結するか、部分的な文字列のコードポイント境界を何らかの方法で検出し、無効なコードポイントまで完全に処理することを考えています。
そのような状況を処理する最善の方法は何でしょうか? 処理は、正確でありながら、可能な限り高速にする必要があります。メモリ使用量は最小限に抑える必要がありますが、パフォーマンスを犠牲にしてはいけません。