When reading with a Reader from an ASCII source, how does the Reader know it is ASCII/8-bit instead of Unicode/16-bit data?

Sandip Chitale

Well the Reader really wraps an InputStream which gives byte-level access to the data source. What the Reader (e.g. InputStreamReader) does is to load a correct implementation of sun.io.ByteToCharConverter based on the "file.encoding" System property. This property is initialized by the JVM by default after consulting the native operating system settings. You can override that by setting the "file.encoding" property using the


This affects all instances of the InputStreamReader though. The InputStreamReader has a constructor which you can use to pass the encoding on a per instance basis.

Here is the link to supported encodings:


This list varies based on JDK version.