2011-02-23 16 views
5

Me gustaría leer en una respuesta XML y hacer un archivo temporal en memoria fuera del xml. Luego, me gustaría leer en el archivo para ver si existen ciertos elementos. Una vez hecho esto, me gustaría deshacerme del archivo temporal. Estoy familiarizado con la creación y lectura de archivos desde/hacia el sistema de archivos, ¿es posible no escribir y luego leer desde un archivo en la memoria solamente?En Java, ¿cómo creo un archivo temporal solo en memoria para analizar xml?

+0

lo que realmente necesita un archivo real ** ** en la memoria (como " en un tmpfs "), ¿o las secuencias en memoria serían suficientes? – Boris

Respuesta

4

¿Por qué te molestaría crearlo como un "archivo" en la memoria? Solo guárdelo como una representación XML (ya sea usando JDOM, la API W3C DOM o lo que sea).

Será mucho más simple examinar en el formato que como un "archivo" en la memoria. Después de todo, si tuviera la forma serializada de la misma, como aparecería en el disco, entonces, para poder consultarla, básicamente tendría que volver a analizarla de todos modos.

+0

Llamo a getInputStream() en una HttpURLConnection, ¿es posible pasar eso y realizar varias operaciones en él? – bmw0128

+0

@ bmw0128: Dependiendo de su API XML, probablemente pueda analizar directamente desde la secuencia a una representación DOM, que luego puede consultar, etc. –

+0

Estaba tratando de usar JAXB, pero el XML de respuesta será diferente en función de si la respuesta es un error o no Entonces, ahora estoy pensando en usar otra forma de leer el xml, y estoy pensando que necesitaré hacer una pasada para verificar la respuesta "buena", y si no, hacer otra pasada a través del xml para tener la culpa ... es por eso que creo que necesito tener el xml en la memoria para que pueda hacer dos pasadas, ¿suena bien? – bmw0128

4

¿Realmente necesita ser un archivo? Por lo general, eso se abstacta.

Por ejemplo, si está utilizando un escritor o lector basado en secuencias, puede usar ByteArrayOutputStream y ByteArrayInputStream y ajustar sus secuencias/escritores/lectores en torno a eso. Rara vez necesitaría burlarse de un archivo; si lo hace, es probable que no estés tan abstemio como podrías en tu diseño.

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
Writer w = new OutputStreamWriter(baos); 
w.write(...); 
byte[] bytes = baos.toByteArray(); 

Del mismo modo, un ByteBuffer puede envolver un archivo, sino también simplemente una matriz de bytes en la memoria.

Parece que ni siquiera es necesario serializarlo en absoluto, como señala Jon.

0

No veo la necesidad de crear un archivo temporal solo para comprobar que existan ciertos elementos. La mayoría de los analizadores XML le permiten leer directamente desde algún flujo de entrada. Todo lo que necesita es convertir la cadena de respuesta XML en un flujo de entrada, luego alimentar a algunos analizador XML para realizar su cheque: -

// converting string to input stream 
InputStream is = new ByteArrayInputStream(myString.getBytes(charset)); 
Cuestiones relacionadas