JavaRush /Java блог /Архив info.javarush /Уровень 18: план уровня и доп. материалы
hubert
41 уровень

Уровень 18: план уровня и доп. материалы

Статья из группы Архив info.javarush
План уровня:
  • Знакомство с потоками: InputStream/OutputStream, FileInputStream, FileOutputStream
  • Знакомство с потоками
  • Знакомство с InputStream, OutputStream, Reader, Writer
  • Примеры работы с FileInputStream, FileOutputStream
  • BufferedInputStream, ByteArrayInputStream
  • Шаблон проектирования «Обертка» (Wrapper/Decorator)
  • Буфер и буферизация
  • Знакомство с StringBuilder
На этом уровне потоки ввода-вывода рассматриваются выборочно. Дополнительное углубленное изучение будет на 31-32 уровнях.
Курс Java Что еще можно посмотреть на досуге: Декоратор или Wrapper/Обёртка Ввод и вывод в Java Обязательно прочтите еще раз мотивирующую статью http://kharkovitcourses.blogspot.de/2012/08/module-java-io.html
Нашли классную ссылку к материалу данной темы? Добавьте ее сюда в виде комментария. Возможно, именно Ваша ссылка поможет другому человеку стать программистом и улучшить свою жизнь!

Вернуться к плану обучения
Вернуться к обучению java онлайн на JavaRush
Комментарии (30)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
alexeyfrei Уровень 34
27 января 2017
Вернулся назад почитать про IO и накнулся на такую вещь, которую в первый раз наверное даже не заметил. В части 6. код показывающий пример обертки:
class Cat
{
 private String name;
 public Cat(String name)
 {
  this.name = name;
 }
 public String getName()
 {
  return this.name;
 }
 public void setName(String name)
 {
  this.name = name;
 }
}

И класс наследник от Cat

class CatWrapper extends Cat
{
 private Cat original;
 public CatWrapper (Cat cat)
 {
  this.original = cat;
 }

 public String getName()
 {
  return "Кот по имени " + original.getName();
 }

 public void setName(String name)
 {
  original.setName(name);
 }
}


Здесь, похоже, либо нужно явно описать конструктор без параметров в классе Cat либо в конструктор CatWrapper добаить super(cat.getName).
boyarskiy Уровень 21
24 января 2017
Друзья, кто в курсе, подскажите как поступить. Вот ранее была дана ссылка не видеолекции Ивана Головоча по потокам. Она за 2013 год. Здесь дана ссылка на лекции по вводу-выводу, они за 2012 год. Как известно, у Ивана выложены записи курсов с одинаковой программой за разные периоды. Можно ли просматривать все темы из одного периода курсов, чтоб не скакать, или они по качесту отличаются, поэтому здесь и выкладывают из разных годов?
anshelen Уровень 36
24 января 2017
Вот есть перевод хорошей статьи про кодировки (иногда помогает при работе с Reader, Writer)
Статья про кодировки
boyarskiy Уровень 21
20 января 2017
Систематизация ввода-вывода Java.io.
mrANDERSON Уровень 26
28 июля 2016
Из лекции
flush при этом вызывается автоматически.
Но в спеке не сказано что flush() вызывется автоматически при вызове close(). К тому же Головач говорит что не вызывается — youtu.be/6YkGh8i2-go?t=1597. Подскажите, пожалуйста, кто точно знает(!) вызывается flush() автоматически при вызове close() или нет!??
Спасибо!

P.S. Спека — public void close()
throws IOException

Closes this output stream and releases any system resources associated with this stream. The general contract of close is that it closes the output stream. A closed stream cannot perform output operations and cannot be reopened.
rhanza Уровень 27
8 июля 2016
Здравствуйте. Возник вопрос по материалам 18 уровня, а конкретно по главе 4 «InputStream/OutputStream».
Приведу кусок кода и текст урока:

public static void main(String[] args) throws Exception
{

 //Создаем поток-чтения-байт-из-файла

 FileInputStream inputStream = newFileInputStream("c:/data.txt");

 // Создаем поток-записи-байт-в-файл

 FileOutputStream outputStream = newFileOutputStream("c:/result.txt");


  byte[] buffer = new byte[1000];

 while (inputStream.available() >0) //пока есть еще непрочитанные байты

 {

  // прочитать очередной блок байт в переменную buffer и реальное количество в count

  int count =inputStream.read(buffer);

  outputStream.write(buffer, 0, count); //записать блок(часть блока) во второй поток

 }


 inputStream.close(); //закрываем оба потока. Они больше не нужны.

 outputStream.close();
}


Конкретнее вот эта часть:

outputStream.write(buffer, 0, count); //записать блок(часть блока) во второй поток


Получается, что мы получаем в int count — реальное количество прочитанных байт (например 328). Следовательно, для записи необходимо взять именно эту часть массива (т.е. buffer [0] — buffer [327]). С учетом нуля получается 328 элементов, которые нам и надо прочитать.
В итоге часть когда, мне кажется, должна выглядеть следующим образом:

outputStream.write(buffer, 0, count-1);


Прав ли я? Возможно я что-то не понимаю, прошу ответить.
Alejandro_Kolio Уровень 30
18 февраля 2016
Друзья, хочу поделиться с вами еще одной ссылкой на видеолекцию.
Очень нравится как объясняет, да другие лекции из этой серии тоже бомба
Java. Работа с файловой системой (лекция 6)
eNdiD Уровень 23
23 февраля 2015
В самом начале 6 лекции 18 уровня:

Однако:

Как же так?
eger Уровень 37
20 февраля 2015
Вторая ссылка: «Ввод и вывод в Java» — не рабочая.
404 Not Found
MindIbniM Уровень 41
4 декабря 2014
Не вполне понятно как согласуется утверждение
Декоратор предусматривает расширение функциональности объекта без определения подклассов.
с примером из лекции. CatWrapper банально наследует Cat, тем самым позволяя расширять функциональность за счет полиморфизма — через переопределение методов. Тот же getName() можно вызвать с помощью super. Таким образом и кода получится меньше.
P.S. Оправданным остается вариант из Вики, то есть работа на уровне интерфейсов.