$ LC_ALL=C java -Dfile.encoding=COMPAT CharsetDemo
Charset.defaultCharset()   = US-ASCII
native.encoding            = ANSI_X3.4-1968
file.encoding (property)   = ANSI_X3.4-1968

latin1.txt bytes: 63 61 66 e9 0a   (the text is "café" saved as ISO-8859-1)
new FileReader(path)                        -> "caf\uFFFD"
new FileReader(path, UTF_8)                 -> "caf\uFFFD"
Files.newBufferedReader(path)               -> MalformedInputException: Input length = 1
Files.readAllLines(path)                    -> MalformedInputException: Input length = 1
Files.lines(path).toList()                  -> UncheckedIOException: java.nio.charset.MalformedInputException: Input length = 1   [cause: MalformedInputException: Input length = 1]
new Scanner(path).nextLine()                -> "caf\uFFFD"
readAllLines(path, ISO_8859_1)  <- fix      -> [café]

utf8.txt bytes:   63 61 66 c3 a9 20 e2 82 b9 31 30 30 0a   ("café ₹100" saved as UTF-8)
new FileReader(path)                        -> "caf\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD100"
new FileReader(path, UTF_8)  <- fix         -> "caf\u00E9 \u20B9100"

bom.csv bytes:    ef bb bf 69 64 2c 6e 61 6d 65 0a 31 2c 41 ...
header line       = "\uFEFFid,name"  length=8   (the text is 7 characters)
header.equals("id,name") = false
after stripping U+FEFF   = "id,name"  equals=true
