Hi,
the attached patch makes fields of OutputStreamWriter that can be final,
final.
Thanks,
Ian
--- java/io/OutputStreamWriter.java 2007-10-12 13:01:47.000000000 +0100
+++ java/io/OutputStreamWriter.java 2007-10-19 15:46:37.000000000 +0100
@@ -91,17 +91,17 @@
/**
* The charset encoder.
*/
- private CharsetEncoder encoder;
+ private final CharsetEncoder encoder;
/**
* java.io canonical name of the encoding.
*/
- private String encodingName;
+ private final String encodingName;
/**
* Buffer output before character conversion as it has costly overhead.
*/
- private CharBuffer outputBuffer;
+ private final CharBuffer outputBuffer;
private final static int BUFFER_SIZE = 1024;
/**
@@ -120,8 +120,10 @@
public OutputStreamWriter (OutputStream out, String encoding_scheme)
throws UnsupportedEncodingException
{
+ CharsetEncoder encoder;
+ String encodingName;
this.out = out;
- outputBuffer = CharBuffer.allocate(BUFFER_SIZE);
+ outputBuffer = CharBuffer.allocate(BUFFER_SIZE);
try
{
@@ -130,42 +132,44 @@
{
encodingName = "ISO8859_1";
encoder = null;
- return;
}
-
- /*
- * Workaround for encodings with a byte-order-mark.
- * We only want to write it once per stream.
- */
- try
- {
- if(encoding_scheme.equalsIgnoreCase("UnicodeBig") ||
- encoding_scheme.equalsIgnoreCase("UTF-16") ||
- encoding_scheme.equalsIgnoreCase("UTF16"))
+ else
+ {
+ /*
+ * Workaround for encodings with a byte-order-mark.
+ * We only want to write it once per stream.
+ */
+ try
+ {
+ if(encoding_scheme.equalsIgnoreCase("UnicodeBig") ||
+ encoding_scheme.equalsIgnoreCase("UTF-16") ||
+ encoding_scheme.equalsIgnoreCase("UTF16"))
+ {
+ encoding_scheme = "UTF-16BE";
+ out.write((byte)0xFE);
+ out.write((byte)0xFF);
+ }
+ else if(encoding_scheme.equalsIgnoreCase("UnicodeLittle"))
+ {
+ encoding_scheme = "UTF-16LE";
+ out.write((byte)0xFF);
+ out.write((byte)0xFE);
+ }
+ }
+ catch(IOException ioe)
{
- encoding_scheme = "UTF-16BE";
- out.write((byte)0xFE);
- out.write((byte)0xFF);
- }
- else if(encoding_scheme.equalsIgnoreCase("UnicodeLittle")){
- encoding_scheme = "UTF-16LE";
- out.write((byte)0xFF);
- out.write((byte)0xFE);
- }
- }
- catch(IOException ioe)
- {
- }
+ }
- Charset cs = EncodingHelper.getCharset(encoding_scheme);
- if(cs == null)
- throw new UnsupportedEncodingException("Encoding "+encoding_scheme+
- " unknown");
- encoder = cs.newEncoder();
- encodingName = EncodingHelper.getOldCanonical(cs.name());
-
- encoder.onMalformedInput(CodingErrorAction.REPLACE);
- encoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
+ Charset cs = EncodingHelper.getCharset(encoding_scheme);
+ if(cs == null)
+ throw new UnsupportedEncodingException("Encoding
"+encoding_scheme+
+ " unknown");
+ encoder = cs.newEncoder();
+ encodingName = EncodingHelper.getOldCanonical(cs.name());
+
+ encoder.onMalformedInput(CodingErrorAction.REPLACE);
+ encoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
+ }
}
catch(RuntimeException e)
{
@@ -174,6 +178,8 @@
encoder = null;
encodingName = "ISO8859_1";
}
+ this.encoder = encoder;
+ this.encodingName = encodingName;
}
/**
@@ -184,8 +190,10 @@
*/
public OutputStreamWriter (OutputStream out)
{
+ CharsetEncoder encoder;
+ String encodingName;
this.out = out;
- outputBuffer = CharBuffer.allocate(BUFFER_SIZE);
+ outputBuffer = CharBuffer.allocate(BUFFER_SIZE);
try
{
String encoding = System.getProperty("file.encoding");
@@ -204,6 +212,8 @@
encoder.onMalformedInput(CodingErrorAction.REPLACE);
encoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
}
+ this.encoder = encoder;
+ this.encodingName = encodingName;
}
/**