Pregunta

Hay un comportamiento extraño en el análisis KML de Google Earth producida por el uso de un analizador compatible, JAK . El espacio de nombres esperado por el analizador no se escribe como la correcta por el sistema de producción de GE KML y al leer este KML de nuevo en otra aplicación Java validación falla.

Estamos tocando la lira la corriente a medida que se lee y la sustitución de las ocurrencias de cualquier otro espacio de nombres con el espacio de nombres adecuado. Esto sólo hay que hacer una vez cerca del principio del archivo. El intento de acercamiento fue a analizar en las primeras líneas a una cadena, realizar una búsqueda y reemplazo, cree stringstream y concatenar los "descanso" de la FileInputStream a la stringstream utilizando un SequenceInputStream. Sin embargo, esto no funciona. será apreciado ninguna idea.

Esto es lo que el fragmento xmlns KML comienza con:

<code>
    <kml xmlns="http://earth.google.com/kml/2.2">
</code>

y esto es lo que queremos sustituir con:

<code>
    <kml xmlns="http://www.opengis.net/kml/2.2">
</code>

La corriente de secuencia vuelve un valor disponible defectuoso (sólo para la primera corriente en la secuencia) haciendo que el analizador falle.

¿Fue útil?

Solución

SequenceInputStream funciona de una manera inusual. Se une a las dos corrientes en una corriente virtual. El método disponible () para un SequenceInputStream volverá la longitud para el flujo de corriente, no los todas las corrientes combinadas como se puede esperar.

En lugar de un SequenceInputStream, se debe utilizar un StringBuffer para leer el archivo en y hacer los cambios que necesita, ya que los datos se leen en. StringBuffer mejora el rendimiento de la adición de objetos de cadena. Analizar el método StringBuffer.toString () a un stringstream si necesita una salida de corriente al final.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top