/*

   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

 */
package org.apache.batik.util.io;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.HashMap;
import java.util.Map;

import org.apache.batik.util.EncodingUtilities;

This class represents a NormalizingReader which handles streams of bytes.
Author:Stephane Hillion
Version:$Id: StreamNormalizingReader.java 1733416 2016-03-03 07:07:13Z gadams $
/** * This class represents a NormalizingReader which handles streams of * bytes. * * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a> * @version $Id: StreamNormalizingReader.java 1733416 2016-03-03 07:07:13Z gadams $ */
public class StreamNormalizingReader extends NormalizingReader {
The char decoder.
/** * The char decoder. */
protected CharDecoder charDecoder;
The next char.
/** * The next char. */
protected int nextChar = -1;
The current line in the stream.
/** * The current line in the stream. */
protected int line = 1;
The current column in the stream.
/** * The current column in the stream. */
protected int column;
Creates a new NormalizingReader. The encoding is assumed to be ISO-8859-1.
Params:
  • is – The input stream to decode.
/** * Creates a new NormalizingReader. The encoding is assumed to be * ISO-8859-1. * @param is The input stream to decode. */
public StreamNormalizingReader(InputStream is) throws IOException { this(is, null); }
Creates a new NormalizingReader.
Params:
  • is – The input stream to decode.
  • enc – The standard encoding name. A null encoding means ISO-8859-1.
/** * Creates a new NormalizingReader. * @param is The input stream to decode. * @param enc The standard encoding name. A null encoding means * ISO-8859-1. */
public StreamNormalizingReader(InputStream is, String enc) throws IOException { if (enc == null) { enc = "ISO-8859-1"; } charDecoder = createCharDecoder(is, enc); }
Creates a new NormalizingReader.
Params:
  • r – The reader to wrap.
/** * Creates a new NormalizingReader. * @param r The reader to wrap. */
public StreamNormalizingReader(Reader r) throws IOException { charDecoder = new GenericDecoder(r); }
This constructor is intended for use by subclasses.
/** * This constructor is intended for use by subclasses. */
protected StreamNormalizingReader() { }
Read a single character. This method will block until a character is available, an I/O error occurs, or the end of the stream is reached.
/** * Read a single character. This method will block until a * character is available, an I/O error occurs, or the end of the * stream is reached. */
public int read() throws IOException { int result = nextChar; if (result != -1) { nextChar = -1; if (result == 13) { column = 0; line++; } else { column++; } return result; } result = charDecoder.readChar(); switch (result) { case 13: column = 0; line++; int c = charDecoder.readChar(); if (c == 10) { return 10; } nextChar = c; return 10; case 10: column = 0; line++; } return result; }
Returns the current line in the stream.
/** * Returns the current line in the stream. */
public int getLine() { return line; }
Returns the current column in the stream.
/** * Returns the current column in the stream. */
public int getColumn() { return column; }
Close the stream.
/** * Close the stream. */
public void close() throws IOException { charDecoder.dispose(); charDecoder = null; }
Creates the CharDecoder mapped with the given encoding name.
/** * Creates the CharDecoder mapped with the given encoding name. */
protected CharDecoder createCharDecoder(InputStream is, String enc) throws IOException { CharDecoderFactory cdf = (CharDecoderFactory)charDecoderFactories.get(enc.toUpperCase()); if (cdf != null) { return cdf.createCharDecoder(is); } String e = EncodingUtilities.javaEncoding(enc); if (e == null) { e = enc; } return new GenericDecoder(is, e); }
The CharDecoder factories map.
/** * The CharDecoder factories map. */
protected static final Map charDecoderFactories = new HashMap(11); static { CharDecoderFactory cdf = new ASCIIDecoderFactory(); charDecoderFactories.put("ASCII", cdf); charDecoderFactories.put("US-ASCII", cdf); charDecoderFactories.put("ISO-8859-1", new ISO_8859_1DecoderFactory()); charDecoderFactories.put("UTF-8", new UTF8DecoderFactory()); charDecoderFactories.put("UTF-16", new UTF16DecoderFactory()); }
Represents a CharDecoder factory.
/** * Represents a CharDecoder factory. */
protected interface CharDecoderFactory { CharDecoder createCharDecoder(InputStream is) throws IOException; }
To create an ASCIIDecoder.
/** * To create an ASCIIDecoder. */
protected static class ASCIIDecoderFactory implements CharDecoderFactory { public CharDecoder createCharDecoder(InputStream is) throws IOException { return new ASCIIDecoder(is); } }
To create an ISO_8859_1Decoder.
/** * To create an ISO_8859_1Decoder. */
protected static class ISO_8859_1DecoderFactory implements CharDecoderFactory { public CharDecoder createCharDecoder(InputStream is) throws IOException { return new ISO_8859_1Decoder(is); } }
To create a UTF8Decoder.
/** * To create a UTF8Decoder. */
protected static class UTF8DecoderFactory implements CharDecoderFactory { public CharDecoder createCharDecoder(InputStream is) throws IOException { return new UTF8Decoder(is); } }
To create a UTF16Decoder.
/** * To create a UTF16Decoder. */
protected static class UTF16DecoderFactory implements CharDecoderFactory { public CharDecoder createCharDecoder(InputStream is) throws IOException { return new UTF16Decoder(is); } } }