Ну, во-первых, вам нужно различать байтов и символов .Вы можете читать с InputStream
определенного количества байтов за раз (как максимальное число; нет гарантии, что вам дадут все запрашиваемые байты), и вы можете прочитать с Reader
числасимволов за раз (опять же, как максимум).
Звучит так, как будто вы вероятно хотите использовать InputStreamReader
вокруг InputStream
, указав соответствующую кодировку символов, изатем прочитайте из InputStreamReader
.Если вам нужно точное количество символов, вам нужно будет выполнить цикл - например:
public static String readExactly(Reader reader, int length) throws IOException {
char[] chars = new char[length];
int offset = 0;
while (offset < length) {
int charsRead = reader.read(chars, offset, length - offset);
if (charsRead <= 0) {
throw new IOException("Stream terminated early");
}
offset += charsRead;
}
return new String(chars);
}