Решил разобрарться основательно, дошел до определенного момента и все капец.
Этот код делает текст заглавными. Я полез в документацию и рассматривал работу с первой строки
PrintStream consoleStream = System.out; - тут понятно.
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - тут, выделяется память под динамический массив byte[], так как конструктор по умолчанию, его размер будет 32 байта.
PrintStream myStream = new PrintStream (outputStream); тут, создается объект, в качестве параметров коснтруктора добавляем наш массив, т.к. ByteArrayOutputStream является дочерним PrintStream мы можем его добавить в качестве параметров, как я понял из документации результят работы конструктора - он нам просто возвращает наш объект только с возможностью использования методов PrintStream.
System.setOut(myStream); а здесь я что то не совсем понимаю что происходит, и ка происходит сама подмена
public class Solution {
public static TestString testString = new TestString();
public static void main(String[] args) throws FileNotFoundException {
PrintStream consoleStream = System.out;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PrintStream myStream = new PrintStream(outputStream);
System.setOut(myStream);
testString.printSomething();
String result = outputStream.toString().toUpperCase();
System.setOut(consoleStream);
System.out.println(result);
}
public static class TestString {
public void printSomething() {
System.out.println("it's a text for testing");
}
}
}