A DESCRIPTION OF THE PROBLEM :
Follow-up for https://bugs.openjdk.java.net/browse/JDK-8131664
Related to:
- https://bugs.openjdk.java.net/browse/JDK-4833833
- https://bugs.openjdk.java.net/browse/JDK-4916565
- https://bugs.openjdk.java.net/browse/JDK-5068812
PrintStream and PrintWriter both support specifying a custom character encoding (Charset), or in the case of PrintWriter even support specifying a Writer and therefore the PrintWriter does not perform any encoding at all.
Yet some methods only mention that characters will be encoded using the "platform encoding", which is incorrect:
- PrintStream:
- writeâ(int)
- writeâ(byte[], int, int)
Note: This method should probably also refer to `print(char[])` (taking an array parameter) instead of the overloads with a single `char` parameter, similar to `write(byte[])` which also refers to `print(char[])`
- write(byte[])
- writeBytesâ(byte[])
- print(boolean)
- print(int)
- print(long)
- print(float)
- print(double)
- print(Object)
- PrintWriter
- print(boolean)
- print(char)
- print(int)
- print(long)
- print(float)
- print(double)
- print(char[])
- print(String)
Note: The javadoc also refers to `write(int)` for writing bytes; this appears to be copied from PrintStream but is incorrect here because PrintWriter.write(int) writes **chars** not bytes.
- print(Object)
Note: The javadoc also refers to `write(int)` for writing bytes; this appears to be copied from PrintStream but is incorrect here because PrintWriter.write(int) writes **chars** not bytes.
It might be best to just completely omit these notes about encoding in the methods and mention it **once** in the class documentation. Currently it just causes a lot of redundance.
Also some side notes which should ideally be fixed as well (feel free to create separate Jira issues):
1. The PrintStream class javadoc should use a link instead of only {@code ...} for the reference to `checkError`.
2. It also might be good to update the javadoc of `PrintStreamâ(OutputStream, boolean, String)`: All other constructors (even PrintWriter ones) which take a String charset use the parameter name `csn` and link to Charset, yet that constructor calls it `encoding` and links to the package doc.
3. `PrintWriter.write(char[], int, int)` unnecessarily has "A" and "Portion" capitalized in the javadoc:
> Writes A Portion of ...
4. `PrintWriter.writeâ(char[])` and `write(String)` javadoc contains implementation details which are irrelevant for the user:
> This method cannot be inherited from the Writer class because it must suppress I/O exceptions.
5. PrintStream.append(CharSequence) and PrintWriter.append(CharSequence) should link to java.nio.CharBuffer instead of only using the term "character buffer" because not every user might understand which class is meant by this.
6. `PrintStream.writeâ(byte[])` `@throws` javadoc is incorrect, it should say
> @throws IOException Never
7. PrintWriter.write(int) should explain as detailed as Write.write(int) that the high order 16-bits are ignored. This is currently not clear.
Follow-up for https://bugs.openjdk.java.net/browse/JDK-8131664
Related to:
- https://bugs.openjdk.java.net/browse/JDK-4833833
- https://bugs.openjdk.java.net/browse/JDK-4916565
- https://bugs.openjdk.java.net/browse/JDK-5068812
PrintStream and PrintWriter both support specifying a custom character encoding (Charset), or in the case of PrintWriter even support specifying a Writer and therefore the PrintWriter does not perform any encoding at all.
Yet some methods only mention that characters will be encoded using the "platform encoding", which is incorrect:
- PrintStream:
- writeâ(int)
- writeâ(byte[], int, int)
Note: This method should probably also refer to `print(char[])` (taking an array parameter) instead of the overloads with a single `char` parameter, similar to `write(byte[])` which also refers to `print(char[])`
- write(byte[])
- writeBytesâ(byte[])
- print(boolean)
- print(int)
- print(long)
- print(float)
- print(double)
- print(Object)
- PrintWriter
- print(boolean)
- print(char)
- print(int)
- print(long)
- print(float)
- print(double)
- print(char[])
- print(String)
Note: The javadoc also refers to `write(int)` for writing bytes; this appears to be copied from PrintStream but is incorrect here because PrintWriter.write(int) writes **chars** not bytes.
- print(Object)
Note: The javadoc also refers to `write(int)` for writing bytes; this appears to be copied from PrintStream but is incorrect here because PrintWriter.write(int) writes **chars** not bytes.
It might be best to just completely omit these notes about encoding in the methods and mention it **once** in the class documentation. Currently it just causes a lot of redundance.
Also some side notes which should ideally be fixed as well (feel free to create separate Jira issues):
1. The PrintStream class javadoc should use a link instead of only {@code ...} for the reference to `checkError`.
2. It also might be good to update the javadoc of `PrintStreamâ(OutputStream, boolean, String)`: All other constructors (even PrintWriter ones) which take a String charset use the parameter name `csn` and link to Charset, yet that constructor calls it `encoding` and links to the package doc.
3. `PrintWriter.write(char[], int, int)` unnecessarily has "A" and "Portion" capitalized in the javadoc:
> Writes A Portion of ...
4. `PrintWriter.writeâ(char[])` and `write(String)` javadoc contains implementation details which are irrelevant for the user:
> This method cannot be inherited from the Writer class because it must suppress I/O exceptions.
5. PrintStream.append(CharSequence) and PrintWriter.append(CharSequence) should link to java.nio.CharBuffer instead of only using the term "character buffer" because not every user might understand which class is meant by this.
6. `PrintStream.writeâ(byte[])` `@throws` javadoc is incorrect, it should say
> @throws IOException Never
7. PrintWriter.write(int) should explain as detailed as Write.write(int) that the high order 16-bits are ignored. This is currently not clear.
- relates to
-
JDK-4833833 (spec) PrintWriter incorrectly describes character conversion
-
- Open
-
-
JDK-4916565 (spec) PrintStream does not document use of charset consistently
-
- Open
-
-
JDK-5068812 (spec) PrintStream documentation regarding character encodings appears incorrect
-
- Open
-
-
JDK-8131664 Javadoc for PrintStream is now incorrect
-
- Resolved
-