Читаем из потока

  • 14
  • Недоступна
Реализуй логику метода getAllDataFromInputStream. Он должен вернуть StringWriter, содержащий все данные из переданного потока. Возвращаемый объект ни при каких условиях не должен быть null. Метод main не участвует в тестировании.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (74)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
BlackGrizzli Team
Уровень 43
1 февраля, 12:06
Когда читал задание, сразу вспомнил про паттерн NullObject
}catch (Exception e){
       return new NoNull().getNullStringWrite();
   }
}
public static class NoNull{
    public StringWriter getNullStringWrite(){
        StringWriter str = new StringWriter();
        str.write("null");
        return str;
    }
}
Хотя можно было куда проще )))
racb
Уровень 28
9 января, 09:13
Я что-то не так делаю может? Крайние 3 темы прохожу почти все задачи только через подсказку....иногда оказывается не хватало мелочи иногда вообще другое решение предлагается
Bingo Boom
Уровень 30
2 января, 13:48
всегда забываю, что валик не понимает метод readAllBytes()? не используйте его
Anonymous #3036451
Уровень 37
16 августа 2022, 14:25
Не уверен что читать в буфер фиксированного размера хорошая идея. В стандартной кодировке UTF-8 могут быть одно-, двух-, трех- и даже четырех-байтовые символы. Есть вероятность что символ "порвет" посередине. Корректное решение вижу таким. Считываем весь файл в ByteArrayOutputStream, после чего преобразуем массив байт в строку и записываем в StringWriter.
Erik
Уровень 42
29 ноября 2022, 02:04
Можно просто весь файл читать строками
StringBuilder sb = new StringBuilder();
StringWriter stringWriter = new StringWriter();
if(is != null) {
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
    while (is.available() > 0) {
        sb.append(bufferedReader.readLine());
    }
    stringWriter.write(sb.toString());
}
return stringWriter;
Dolivo Serg
Уровень 40
19 июля 2022, 08:59
reader.lines().forEach(writer::write);
Дмитрий
Уровень 37
27 июня 2022, 10:52
9 попыток Карл 9 ... а всё из-за проверки на null!!! Это достойно песни!
SoSed
Уровень 48
Expert
7 февраля 2022, 11:10
Как уже много раз писали до этого, задание некорректно. Даже если без проверки на null не может быть ситуаций, когда метод вернёт nullб валидатор не пропустит. Напимали бы уже, что метод не должен бросать исключений если входящий параметр == null. P.S. Ну, и по традиции readAllBytes() использовать нельзя)
PaiMei in J# Grand Master в Eagles' Claw
13 октября 2021, 14:51
Пффф, а есть объяснение для чего нужно писать условие проверки if (is == null) { return stringWriter; } Мы ведь в любом случае будем его возвращать, т.е. в конце метода все равно будет эта заветная строчка, так в чем здесь соль или, как говорится, КАКАВА причина использования блока if?🙄 StringWriter writer = new StringWriter(); byte[] bytes = new byte[1024]; int i; while ((i = is.read(bytes)) != -1) { writer.write(new String(bytes).trim()); } return writer;
Bulkin
Уровень 40
24 октября 2021, 18:32
если не проверять на null - У тебя NullPointerException в строке is.read(bytes) выбросится, если написать в мейне:
StringWriter writer = getAllDataFromInputStream(null);
PaiMei in J# Grand Master в Eagles' Claw
25 октября 2021, 12:36
так тогда NullPointerException будет выброшен раньше, еще до входа в метод, так как аргументом null передается
Andrey
Уровень 41
12 мая 2022, 10:49
Не верьте седой бороде ПэйМэя (комментарий выше) - он не прав, протестите 🙂
PaiMei in J# Grand Master в Eagles' Claw
13 октября 2021, 14:23
Вот это прям хорошо)
Дмитрий
Уровень 37
27 июня 2022, 10:17
GBRTANK WARBOT
Уровень 37
30 сентября 2021, 18:33
Засунул код в try {} catch () {}, на случай если входной поток null, файл который читает input strem не существует и тд. В комментариях кстати пишут, что валидатор валит тестом на null, т.е. можно просто null поддержать if-om
if (is == null) return new StringWriter();
, как у Дмитрий Яковенко ниже.