3

私はアンドロイドが初めてで、本を読んでいる間、ループでの新しい割り当ての理由を理解できません。ループの前に一度作るだけで十分ではないですか?

        FileInputStream fIn =
                openFileInput("textfile.txt");
        InputStreamReader isr = new
                InputStreamReader(fIn);
        char[] inputBuffer = new char[READ_BLOCK_SIZE];
        String s = "";
        int charRead;
        while ((charRead = isr.read(inputBuffer))>0)
        {
            //---convert the chars to a String---
            String readString =
            String.copyValueOf(inputBuffer, 0,
            charRead);
            s += readString;
            inputBuffer = new char[READ_BLOCK_SIZE];
        }
4

2 に答える 2

3

String.copyValueOfjavadocから:

  /**
 * Creates a new string containing the specified characters in the character
 * array. Modifying the character array after creating the string has no
 * effect on the string.
 *
 * @param start
 *            the starting offset in the character array.
 * @param length
 *            the number of characters to use.

したがって、ループで新しい char[] を作成する理由はありません。

于 2013-01-08T16:21:55.960 に答える
1

バッファを一度だけ割り当てるだけで十分なので、ループ内の割り当てを削除するだけでうまく機能するはずです。

もう 1 つ... このコードは、ループ内で文字列連結を使用しているため、パフォーマンスが非常に低くなります。StringBuilder.append()の代わりに使用する必要がありs += readStringます。

PS このような単純なコードにはエラーが多すぎるため、別の本を選ぶことをお勧めします。

于 2013-01-08T16:43:08.517 に答える