1

私のプロジェクトでは、いくつかのファイルを保存しています。ファイルが要求されると、HBase テーブルからファイルをフェッチし、ブラウザーに送信します。

データは HBase にバイト単位で保存されます。したがって、ファイルをフェッチすると、バイト単位で取得されます。

ここで、これらのバイトをファイル オブジェクトまたは出力ストリームに変換する必要があります。

私が知りたいのは、File オブジェクトを介してファイルを送信する方が良いのか、それとも出力ストリームを送信するのかということです。

ファイルは、1 MB から 10 MS までさまざまです。

REST API を使用してデータを送信しています。

4

3 に答える 3

2

あなたが何をしているのかは完全には明らかではありませんが、真実は ajava.io.Fileはパスの単なる抽象化であるため、データはまったく含まれていません。そのjava.io.Fileため、実際のファイルの内容を送信したい場合、オブジェクトを送信しても何の役にも立たないと思います。

OutputStream特定のシンクへのバイトの流れを制御するためだけのクラスであるを送信することも意味がありません。OutputStream送信するのはストリームではなくバイトです (つまり、シンクがソケットの場合、この特定のシンクに関連付けられたを使用して、ソケットを介してファイルの内容のバイトを送信するのが理にかなっています)。

于 2012-05-28T17:52:05.703 に答える
1

java.io.File オブジェクトを送信しても、それは非常にJava 固有のバイナリ オブジェクトであり、受信システムが Java であることが義務付けられるため、役に立ちません。

あなたが言った、あなたはREST を使用しています。これは、テクノロジー/プラットフォームに依存しない何かを必要とします。

実行可能なアプローチの 1 つとして、次のようなものがあります。

  1. 残りの API が、ユーザーがダウンロードしたいファイルを指す URL を返すようにします。
  2. この URLのサーブレットを作成/構成します。
  3. このサーブレットは、リクエストを受け取ると、データベースを読み取り、レスポンス ストリーム (出力ストリーム) に書き込みます。
  4. ユーザーは、ファイルのダウンロードを求めるプロンプトを受け取ります。

サーブレットを使用したPDF ファイルのダウンロードの例を次に示します。

于 2012-05-28T18:15:25.107 に答える
1

質問は、直接 OutputStream に書き込むか、最初に byte[] をローカル ファイルに保存するかを尋ねていると思います。最初にローカル ファイルに保存することを考える唯一の理由は、HBase からの取得とユーザーのダウンロードを分離することです。HBase から byte[] を返す各要求が、応答でファイル全体をユーザーに返すことが予想される場合は、OutputStream を使用します。

そうは言っても、10 MB を byte[] として取得すると、リクエストごとに大量のメモリが消費される可能性があるようです。リクエストごとに最大 10 MB の RAM を必要としないように、HBase から InputStream を取得できるかどうかを確認したい場合があります。

于 2012-05-28T18:15:42.520 に答える