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

org.bson.io.BasicOutputBuffer Maven / Gradle / Ivy

There is a newer version: 5.10
Show newest version
// BasicOutputBuffer.java

/**
 *      Copyright (C) 2008 10gen Inc.
 *
 *   Licensed 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.bson.io;

import java.io.DataOutput;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

public class BasicOutputBuffer extends OutputBuffer {

	private int _cur;
	private int _size;
	private byte[] _buffer = new byte[512];

	@Override
	public void write(byte[] b) {
		write(b, 0, b.length);
	}

	@Override
	public void write(byte[] b, int off, int len) {
		_ensure(len);
		System.arraycopy(b, off, _buffer, _cur, len);
		_cur += len;
		_size = Math.max(_cur, _size);
	}

	@Override
	public void write(int b) {
		_ensure(1);
		_buffer[_cur++] = (byte) (0xFF & b);
		_size = Math.max(_cur, _size);
	}

	@Override
	public int getPosition() {
		return _cur;
	}

	@Override
	public void setPosition(int position) {
		_cur = position;
	}

	@Override
	public void seekEnd() {
		_cur = _size;
	}

	@Override
	public void seekStart() {
		_cur = 0;
	}

	/**
	 * @return size of data so far
	 */
	@Override
	public int size() {
		return _size;
	}

	/**
	 * @return bytes written
	 */
	@Override
	public int pipe(OutputStream out) throws IOException {
		out.write(_buffer, 0, _size);
		return _size;
	}

	/**
	 * @return bytes written
	 */
	public int pipe(DataOutput out) throws IOException {
		out.write(_buffer, 0, _size);
		return _size;
	}

	void _ensure(int more) {
		final int need = _cur + more;
		if (need < _buffer.length) return;

		int newSize = _buffer.length * 2;
		if (newSize <= need) newSize = need + 128;

		byte[] n = new byte[newSize];
		System.arraycopy(_buffer, 0, n, 0, _size);
		_buffer = n;
	}

	@Override
	public String asString() {
		return new String(_buffer, 0, _size);
	}

	@Override
	public String asString(String encoding) throws UnsupportedEncodingException {
		return new String(_buffer, 0, _size, encoding);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy