Unikaj używania domyślnego zestawu znaków, gdy strumień wyjściowy jest strumieniem PrintStream

Ta reguła powoduje oznaczenie następujących konstruktorów klas Java , które przyjmują klasę java.io.OutputStream bez zestawu znaków:

Sygnatury konstruktora, które przyjmują wartość domyślną OutputStream bez parametrów Charset, używają kodowania Charset.defaultCharset() . Powoduje to wystąpienie problemu, jeśli strumień OutputStream do zawijania jest strumieniem PrintStream, który przechowuje własny zestaw znaków, co prowadzi do jego zignorowania. Jest to szczególnie problematyczne, gdy proces PrintWriter opakowuje plik System.out/err, ponieważ w przypadku strumienia JEP400 domyślnym zestawem znaków jest teraz UTF-8 , podczas gdy standardowe operacje we/wy pozostają w kodowaniu native.encoding.

W ramach tej zmiany klasa java.io.PrintStream definiuje teraz metodę charset () zwracającą zestaw znaków strumienia drukowania.

Więcej informacji na ten temat zawiera dokument JDK-8276970 .