StringWriter
StringWriter is about reading or writing data outside the program — files, bytes, or characters. Byte streams (InputStream/OutputStream) handle raw bytes. Character streams (Reader/Writer) handle text.
For StringWriter, always close resources. Prefer try-with-resources so close happens even if an error occurs. Buffered streams are faster for many small reads.
StringWriter viva: serialization turns an object into bytes. transient fields are skipped. Don’t serialize secrets without a plan.
Let's take this on the board with one tiny Main class — no extra files. StringWriter — shows length, substring, case change, and equalsIgnoreCase. Start from main, go line by line, and stop at each print. That output is the proof for StringWriter.
== vs equals() on String is a classic trap.