0

サーバー上に多数のファイル(Tomcatなど)を生成するWebサービスがあります。これらのファイルは圧縮され、サーブレットのOutputStreamを介してクライアントにストリーミングされます。

この部分は明らかです。私が苦労しているのは、2つのクライアントがこの機能を同時に使用するように、これらのファイルを管理する方法です。

私はいくつかの可能な解決策を考えることができます、そして私はこれを処理するための最も簡単で最良の方法が何であるかわかりません、そしていくつかの考えを聞きたいです。

例:ディレクトリ名にタイムスタンプを追加してディレクトリをtmp_123142345作成し、zipファイルをストリームに書き込んだ後にこのフォルダを削除することができます。2人が同じミリ秒で同じファイルをダウンロードしようとする可能性はほとんどありません。

しかし、もっと良い方法はありますか?

4

4 に答える 4

0

可能性は低いですが、不可能ではありません。おそらく、衝突のない取締役会で自慢できるソリューションが必要になるでしょう。:)

グローバル同期カウンターまたはそれ以上のAtomicLongカウンターを用意します。次のようなディレクトリ名を作成します"tmp_"+ (atomicLongCounter.addAndGet(1))

したがって、同じミリ秒で着陸した場合でも、それぞれに一意のディレクトリがあります。

于 2012-07-21T03:51:08.023 に答える
0

あなたの解決策は大丈夫だと思いますが、実際にはファイルを削除する必要はありません。これらすべてのファイルを1日1回削除するタスクをタスクマネージャーに書き込むだけです(ディレクトリをクリーンアップするだけです)。ここを見てください、deディレクトリをきれいにするためのいくつかの解決策があります。

于 2012-07-21T03:53:29.910 に答える
0

使ってみませんjava.util.UUIDか?これにより、ファイル名に追加できる一意のIDを取得できます。

于 2012-07-21T03:59:45.287 に答える
0

FileクラスにあるメソッドcreateTempFileを使用できます。これにより、Javaは、ファイルを配置できる一意のフォルダーを作成できます...

于 2012-07-21T12:59:10.207 に答える