All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.feilong.lib.xstream.core.util.QuickWriter Maven / Gradle / Ivy

Go to download

feilong is a suite of core and expanded libraries that include utility classes, http, excel,cvs, io classes, and much much more.

There is a newer version: 4.0.8
Show newest version
/*
 * Copyright (C) 2004, 2005, 2006 Joe Walnes.
 * Copyright (C) 2006, 2007, 2009 XStream Committers.
 * All rights reserved.
 *
 * The software in this package is published under the terms of the BSD
 * style license a copy of which has been included with this distribution in
 * the LICENSE.txt file.
 * 
 * Created on 07. March 2004 by Joe Walnes
 */
package com.feilong.lib.xstream.core.util;

import java.io.IOException;
import java.io.Writer;

import com.feilong.lib.xstream.io.StreamException;

public class QuickWriter{

    private final Writer writer;

    private char[]       buffer;

    private int          pointer;

    public QuickWriter(Writer writer){
        this(writer, 1024);
    }

    public QuickWriter(Writer writer, int bufferSize){
        this.writer = writer;
        buffer = new char[bufferSize];
    }

    public void write(String str){
        int len = str.length();
        if (pointer + len >= buffer.length){
            flush();
            if (len > buffer.length){
                raw(str.toCharArray());
                return;
            }
        }
        str.getChars(0, len, buffer, pointer);
        pointer += len;
    }

    public void write(char c){
        if (pointer + 1 >= buffer.length){
            flush();
            if (buffer.length == 0){
                raw(c);
                return;
            }
        }
        buffer[pointer++] = c;
    }

    public void write(char[] c){
        int len = c.length;
        if (pointer + len >= buffer.length){
            flush();
            if (len > buffer.length){
                raw(c);
                return;
            }
        }
        System.arraycopy(c, 0, buffer, pointer, len);
        pointer += len;
    }

    public void flush(){
        try{
            writer.write(buffer, 0, pointer);
            pointer = 0;
            writer.flush();
        }catch (IOException e){
            throw new StreamException(e);
        }
    }

    public void close(){
        try{
            writer.write(buffer, 0, pointer);
            pointer = 0;
            writer.close();
        }catch (IOException e){
            throw new StreamException(e);
        }
    }

    private void raw(char[] c){
        try{
            writer.write(c);
            writer.flush();
        }catch (IOException e){
            throw new StreamException(e);
        }
    }

    private void raw(char c){
        try{
            writer.write(c);
            writer.flush();
        }catch (IOException e){
            throw new StreamException(e);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy