3

サーバー クライアント アーキテクチャを適応させるプロジェクトに取り組んでいます。クライアントとサーバー間で転送されるメッセージは、文字列とバイト配列の組み合わせです。メッセージ全体のサイズを事前に送信する必要があります。

バイト配列のバイト サイズを見つけるのは簡単ですが、文字列の場合はそうではありません。明らかに、これらの文字列をバイト配列に変換できます (エンコーディングを考慮します)。しかし、これらの文字列は長くなる可能性があり、それらのコピーにメモリを割り当てたくありません (たとえば、getBytes() は新しい配列を割り当てます)。

私の質問は、次のことを行う最もメモリ効率の良い方法は何ですか?

  1. 文字列のバイト サイズを調べる (UTF-8 エンコーディングを使用)
  2. そのサイズを出力ストリームに書き込みます
  3. 文字列を出力ストリームに書き込みます
4

3 に答える 3

1

サイズが重要な問題でない場合は、文字列に UTF16-BE エンコーディングを使用してください。この場合、サイズは文字列の長さ * 2 になります。

このモードでは、追加の処理 (Unicode の高低サロゲートなど) を行う必要なく、Java 文字を 1 つずつ書き込むことができます。

于 2013-05-01T15:15:39.683 に答える