一度に最大50000文字を保持できる文字配列があります。このアレイの内容は、ソケット接続を介して送られます。ただし、この文字バッファに空の要素が含まれないという保証はありません。次に、この文字配列を文字列に変換する必要があります(たとえば、new String(buffer);)。私の質問は、50000の長さではないソケットからバッファを受け取るときはいつでも、このchar配列またはこの文字列から残っている要素または空の要素をどのように削除するのですか?そうでない場合、あなたが提案する最も効率的な方法は何ですか?
/これが現在の実装です/
private BufferedReader is;
//Other code
public String readBufferUpdate() throws IOException {
char[] buffer =new char[50000];
is.read(buffer);
return new String(buffer);
}
//////これはByteArrayOutputStreamを使用した実装です
public String readAuth() throws IOException {
int s;
ByteArrayOutputStream bao = new ByteArrayOutputStream();
while ((s = is.read()) != -1) {
bao.write(s);
if (!is.ready())
break;
}
if (s == -1) {
return null;
}
String result = bao.toString();
return result;
}
大量のデータを読み取る必要がある場合、この実装は非常に遅くなります。
- - - - - - - - -編集
(たとえば、サーバーからデータが送信されますが、常に50000ロングバイトであるとは限りませんが、32822ロングバイトである場合は、残りの配列要素を削除する必要があります)