Package java.io

Source Code of java.io.BufferedWriter

package java.io;

import lejos.charset.Latin1Encoder;
import lejos.io.LejosOutputStreamWriter;

/**
* NOTE: Text writing is not synchronized either like standard Java.
*
* @author Sven Köhler
*/
public class BufferedWriter extends Writer
{
  private static final int DEFAULT_BUFFERSIZE = 64;
  private static final int MIN_BUFFERSIZE = 1;
 
  private final Writer parent;
  private final char[] buffer;
  private int limit;
 
  /**
   * @deprecated use {@link OutputStreamWriter} instead.
   */
  @Deprecated
  public BufferedWriter(OutputStream os)
  {
    this(new LejosOutputStreamWriter(os, new Latin1Encoder(), 32));
  }
 
  /**
   * In the standard Java API the constructor accepts a Writer
   * object, such as OutputStreamWriter.
   * @param out
   */
  public BufferedWriter(Writer out)
  {
    this(out, DEFAULT_BUFFERSIZE);
  }
 
  public BufferedWriter(Writer out, int size)
  {
    if (size < MIN_BUFFERSIZE)
      size = MIN_BUFFERSIZE;
   
    this.parent = out;
    this.buffer = new char[size];
  }
 
  @Override
  public void close() throws IOException
  {
    try
    {
      this.flushAny();
    }
    finally
    {
      this.parent.close();
    }
  }
 
  private void flushAny() throws IOException
  {
    if (this.limit > 0)
    {
      this.parent.write(this.buffer, 0, this.limit);
      this.limit = 0;
    }
  }
 
  private int flushFull() throws IOException
  {
    if (this.limit >= this.buffer.length)
    {
      this.parent.write(this.buffer, 0, this.limit);
      this.limit = 0;
    }
    return this.buffer.length - this.limit;
  }

  @Override
  public void flush() throws IOException
  {
    this.flushAny();
    this.parent.flush();
  }
 
  public void newLine() throws IOException
  {
    //TODO use constant for this
    this.write('\r');
    this.write('\n');
  }
 
  @Override
  public Writer append(CharSequence str, int start, int end) throws IOException
  {
    int len = end - start;
    while (len > 0)
    {
      int plen = this.flushFull();
      if (plen > len)
        plen = len;
     
      for (int i=0; i<plen; i++)
        this.buffer[this.limit + i] = str.charAt(start + i);
   
      len -= plen;
      start += plen;
      this.limit += plen;
    }
    return this;
  }

  @Override
  public void write(char[] c, int off, int len) throws IOException
  {
    while (len > 0)
    {
      int plen = this.flushFull();
      if (plen > len)
        plen = len;
     
      System.arraycopy(c, off, this.buffer, this.limit, plen);
   
      len -= plen;
      off += plen;
      this.limit += plen;
    }
  }

  @Override
  public void write(int c) throws IOException
  {
    this.flushFull();   
    this.buffer[this.limit++] = (char)c;
  }

  @Override
  public void write(String str, int off, int len) throws IOException
  {
    while (len > 0)
    {
      int plen = this.flushFull();
      if (plen > len)
        plen = len;

      str.getChars(off, off+plen, this.buffer, this.limit);
   
      len -= plen;
      off += plen;
      this.limit += plen;
    }
  }
}
TOP

Related Classes of java.io.BufferedWriter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.