0

大きな文字列であるオブジェクトのプロパティがある場合 (ファイルの内容が 50KB から 1 MB、おそらくそれ以上)、POJO でそのようなプロパティを宣言する方法は何ですか? 私がする必要があるのは、オブジェクト自体を「重く」することなく、アプリケーションのあるレイヤーから値を設定し、別のレイヤーに転送できることだけです。

String 自体を参照するのではなく、InputStream または OutputStream を関連付けて値を取得/設定することが理にかなっているかどうかを検討していました。つまり、内容の値を読み取ろうとすると、むしろバイトのストリームとして読み取られます。メモリにロードされた巨大な文字列全体より...考え?

4

2 に答える 2

1

あなたが説明していることは、予想されるデータの使用に大きく依存します。コンテンツを未加工の形式で配信する場合は、より効率的な管理方法があるかもしれません。

たとえば、アプリに Web インターフェースがある場合、アプリは Web サーバーの URL を提供するだけで、コンテンツをリクエスターにストリーミングできます。CLI ベースのアプリの場合は、単純なファイルのコピーで済む場合があります。ただし、アプリがファイルを処理している場合、おそらく POJO は生データ自体ではなく、その処理の結果のみを保持できます。

外部ストリームへの参照で POJO を使用する方法に沿って一般的なパターンを提供したい場合は、POJO に、ストリームの場所を示す URI に似たもの (データベースの行 ID やファイル名など) を格納することをお勧めします。または URI) を使用して、ストリーム自体のインスタンスを保存するのではありません。そうすることで、開いているファイル ハンドルの数を減らし、潜在的な同時実行の問題を防ぎ、必要に応じて、他の場所に保存されている生データを複製することなく、これらのオブジェクトをローカルでシリアル化できます。

于 2013-02-26T20:31:30.223 に答える
1

アクセスするたびにストリームまたはイテレータを提供するオブジェクトを持つことができます。コンテンツは、ファイルなどのストレージに存在する必要があることに注意してください。つまり、オブジェクトはストレージへのポインタ (ファイル パスなど) を格納し、誰かがそれにアクセスするたびに、ストリームを開くかイテレータを作成して、そのパーティに読み取らせます。また、メモリを節約するために、それを消費する人は誰でも、コンテンツ全体をメモリに保存しないようにする必要があることに注意してください。

ただし、50KB または 1MB は非常に小さいです。あなたがギガバイト(またはおそらく100メガバイト)を持っていない限り、私はそのようなことをしようとはしません.

また、大規模なデータがある場合でも、多くの場合、ファイルまたは使用するストレージを使用する方が簡単です.

tl;dr : 文字列を使用するだけです。

于 2013-02-26T13:13:00.823 に答える