2011-02-23 2 views
5

私はXMLレスポンスを読み込み、xmlからメモリ内に一時ファイルを作成したいと考えています。 次に、ファイルを読み込んで、特定の要素が存在するかどうかを確認したいと思います。 これが終わったら、私はちょうど一時ファイルを取り除きたいと思います。 私はファイルシステムとの間でファイルを作成したり読み込んだりすることに慣れていますが、メモリ内のファイルのみを書き込んだり読み込んだりすることはできますか?Javaでは、xmlを解析するためにメモリ内にのみ一時ファイルを作成するにはどうすればよいですか?

+0

本当に実際の**ファイル**がメモリに必要ですかon tmpfs ")、またはメモリ内ストリームで十分でしょうか? – Boris

答えて

4

なぜあなたはメモリ内の「ファイル」として作成するのですか? XML表現(それがJDOM、W3C DOM APIなどを使用しているかどうか)としてそのまま保持してください。

では、という形式で、メモリ内の "ファイル"よりもずっと簡単に調べることができます。結局のところ、ディスク上に表示されるようなシリアライズされた形式を持っていれば、それを照会するためには基本的にそれをもう一度解析する必要があります!

+0

私はHttpURLConnection上でgetInputStream()を呼び出していますが、それを周りに渡してさまざまな操作を行うことは可能でしょうか? – bmw0128

+0

@ bmw0128:XML APIによっては、おそらくストリームからDOM表現に直接パースすることができます。 –

+0

JAXBを使用しようとしていましたが、応答XMLは応答エラーかどうか。だから、私はxmlを読むために他の方法を使うことを考えています。そして、私は "良い"応答をチェックするために1回通す必要があると思っています。もし存在しなければ、xml私はそれが2つのパスを作ることができるように私はメモリにxmlを持っている必要があると思うのですが、右の音ですか? – bmw0128

4

本当にファイルである必要がありますか?一般的にそれは離れてabstactedです。

たとえば、ストリームベースのライターまたはリーダーを使用している場合は、ByteArrayOutputStreamByteArrayInputStreamを使用してストリーム/ライター/リーダーをラップすることができます。ファイル自体をモックする必要があることはめったにありません。もしあなたがそうしているのであれば、あなたのデザインでできるだけ多くのことを止めていないでしょう。

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

同様に、ByteBufferはファイルだけでなく、メモリ内のバイトの単純配列をラップすることができます。

しかし、Jonノートのように、シリアル化する必要はありません。

0

特定の要素が存在するかどうかを確認するために一時ファイルを作成する必要はありません。ほとんどのXMLパーサーでは、入力ストリームから直接読み込むことができます。必要なのは、XMLレスポンス文字列を入力ストリームに変換してから、XMLパーサーにフィードを渡してチェックを実行するだけです。 -

// converting string to input stream 
InputStream is = new ByteArrayInputStream(myString.getBytes(charset)); 
関連する問題