com.ibm.jzos

Class TranscodingPrintStream

  • java.lang.Object
    • java.io.OutputStream
      • java.io.FilterOutputStream
        • java.io.PrintStream
          • com.ibm.jzos.TranscodingPrintStream
  • All Implemented Interfaces:
    java.io.Closeable, java.io.Flushable, java.lang.Appendable, java.lang.AutoCloseable


    public class TranscodingPrintStream
    extends java.io.PrintStream
    A subclass of PrintStream that sets an encoding on its OutputStreamWriter and also transcodes any write(byte[]) messages that are sent to it when it is treated as an OutputStream. This avoids the problem caused when an application wraps System.out or System.err in its own PrintWriter which would override and lose the PrintStream's encoding.

    When both source and target codepages are single byte encodings, (e.g. ISO-8859-1, IBM-1047) a direct map can be used, and is the most efficient way to transcode. If one or both of the codepages are multi-byte (e.g. UTF-8) the CharsetEncoder and CharsetDecoder classes need to be used. For this case, the Transcoder class is used. It provides a protocol that accepts an array of source codepage encoded bytes, and writes the target codepage encoded bytes to a supplied output stream.

    • Constructor Summary

      Constructors 
      Constructor and Description
      TranscodingPrintStream(java.io.OutputStream out, boolean autoFlush, java.lang.String targetEncoding, boolean enable)
      Create a new transcoding print stream.
      TranscodingPrintStream(java.io.OutputStream out, boolean autoFlush, java.lang.String sourceEncoding, java.lang.String targetEncoding, boolean enable)
      Create a new transcoding print stream.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method and Description
      void flush()
      Overridden to flush the transcoder if one is being used.
      byte[] getTranslateTable()
      Answer the translate table in place.
      boolean isActive()
      Answer whether this PrintStream is actively transcoding.
      void write(byte[] buf, int off, int len)
      Override PrintStream.write(byte[], int, int) to transcode bytes from the default encoding to the target encoding.
      void write(int b)
      Override PrintStream.write(int b) to transcode bytes from the default encoding to the target encoding.
      • Methods inherited from class java.io.PrintStream

        append, append, append, checkError, close, format, format, print, print, print, print, print, print, print, print, print, printf, printf, println, println, println, println, println, println, println, println, println, println
      • Methods inherited from class java.io.FilterOutputStream

        write
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • TranscodingPrintStream

        public TranscodingPrintStream(java.io.OutputStream out,
                                      boolean autoFlush,
                                      java.lang.String targetEncoding,
                                      boolean enable)
                               throws java.io.UnsupportedEncodingException
        Create a new transcoding print stream.
        Parameters:
        out - The output stream to which values and objects will be printed
        autoFlush - A boolean; if true, the output buffer will be flushed whenever a byte array is written, one of the println methods is invoked, or a newline character or byte ('\n') is written
        targetEncoding - The String naming the encoding to use, both for the internal OutputStreamWriter and for translating write(byte[]) IOStream messages sent to this object
        Throws:
        java.io.UnsupportedEncodingException
        See Also:
        PrintStream.PrintStream(java.io.OutputStream, boolean), PrintWriter.PrintWriter(java.io.OutputStream, boolean)
      • TranscodingPrintStream

        public TranscodingPrintStream(java.io.OutputStream out,
                                      boolean autoFlush,
                                      java.lang.String sourceEncoding,
                                      java.lang.String targetEncoding,
                                      boolean enable)
                               throws java.io.UnsupportedEncodingException
        Create a new transcoding print stream.
        Parameters:
        out - The output stream to which values and objects will be printed
        autoFlush - A boolean; if true, the output buffer will be flushed whenever a byte array is written, one of the println methods is invoked, or a newline character or byte ('\n') is written
        sourceEncoding - The String naming the encoding that is the source encoding for the transcoder. If null, the default will be used (the "file.encoding" System property)
        targetEncoding - The String naming the encoding to use, both for the internal OutputStreamWriter and for translating write(byte[]) IOStream messages sent to this object
        Throws:
        java.io.UnsupportedEncodingException
        See Also:
        PrintStream.PrintStream(java.io.OutputStream, boolean), PrintWriter.PrintWriter(java.io.OutputStream, boolean)
    • Method Detail

      • write

        public void write(int b)
        Override PrintStream.write(int b) to transcode bytes from the default encoding to the target encoding.
        Overrides:
        write in class java.io.PrintStream
      • write

        public void write(byte[] buf,
                          int off,
                          int len)
        Override PrintStream.write(byte[], int, int) to transcode bytes from the default encoding to the target encoding.
        Overrides:
        write in class java.io.PrintStream
      • isActive

        public boolean isActive()
        Answer whether this PrintStream is actively transcoding. If false, the write() methods default to the superclass behavior.
      • getTranslateTable

        public byte[] getTranslateTable()
        Answer the translate table in place. Will return null if !isActive() or either encoding is multi-byte.
      • flush

        public void flush()
        Overridden to flush the transcoder if one is being used.
        Specified by:
        flush in interface java.io.Flushable
        Overrides:
        flush in class java.io.PrintStream
� Copyright IBM Corporation 2005, 2022.