
org.apache.solr.common.util.FastWriter Maven / Gradle / Ivy
The newest version!
/**
* 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.solr.common.util;
import java.io.Writer;
import java.io.IOException;
/** Single threaded BufferedWriter
* Internal Solr use only, subject to change.
*/
public class FastWriter extends Writer {
// use default BUFSIZE of BufferedWriter so if we wrap that
// it won't cause double buffering.
private static final int BUFSIZE = 8192;
private final Writer sink;
private final char[] buf;
private int pos;
public FastWriter(Writer w) {
this(w, new char[BUFSIZE], 0);
}
public FastWriter(Writer sink, char[] tempBuffer, int start) {
this.sink = sink;
this.buf = tempBuffer;
this.pos = start;
}
public static FastWriter wrap(Writer sink) {
return (sink instanceof FastWriter) ? (FastWriter)sink : new FastWriter(sink);
}
@Override
public void write(int c) throws IOException {
write((char)c);
}
public void write(char c) throws IOException {
if (pos >= buf.length) {
sink.write(buf,0,pos);
pos=0;
}
buf[pos++] = (char)c;
}
@Override
public FastWriter append(char c) throws IOException {
if (pos >= buf.length) {
sink.write(buf,0,pos);
pos=0;
}
buf[pos++] = (char)c;
return this;
}
@Override
public void write(char cbuf[], int off, int len) throws IOException {
int space = buf.length - pos;
if (len < space) {
System.arraycopy(cbuf, off, buf, pos, len);
pos += len;
} else if (len
© 2015 - 2025 Weber Informatics LLC | Privacy Policy