1

Java 仕様によると、charデータ型のサイズは 16 ビットまたは 2 バイトです。

だから、私は次のコードを書いています:

private static final int BUFFER_SIZE=1024;
char[] buffer=new char[BUFFER_SIZE];
BufferedReader br= new BufferedReader(new InputStreamReader(conn.getInputStream()));

while (true){
    byteFromStream=in.read(buffer);
    if (byteFromStream==-1) break;
    totalBytesLoaded=totalBytesLoaded+byteFromStream*2;
}

しかし、いくつかの奇妙な理由で、ストリームで実際に読み取られた文字数を返すread()の仕様に従って、ストリームで使用できるよりも多くのバイトを読み取っています。

ああ、私は合計ストリームサイズを取得しています

bytesTotal=conn.getContentLength();

私自身がサーバーにファイルをアップロードし、それらのサイズを知っているので、これはかなりうまく機能しています。

4

1 に答える 1

1

このメソッドは、読み取った文字数を返します。特に、ストリームからの文字のバイト サイズに関する一般的な仮定を行うことができないため、その値を 2 倍にする必要はありません。

文字あたりのバイト数は、文字エンコーディングによって異なります (たとえば、1 バイトの場合もあります)。リーダー コンポーネントはそれを認識しており、読み取った文字数のみを通知します。

于 2012-07-16T23:50:28.393 に答える