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

org.apache.yoko.rmi.util.ByteBuffer Maven / Gradle / Ivy

/**
*
* 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.yoko.rmi.util;

public class ByteBuffer {
    byte[] contents;

    int pos = 0;

    public ByteBuffer(int size) {
        contents = new byte[size];
    }

    public ByteBuffer() {
        this(48);
    }

    public void append(byte b) {
        ensure(1);

        contents[pos++] = b;
    }

    public void append(char c) {
        ensure(1);

        contents[pos++] = (byte) c;
    }

    static final char[] integerData = new char[] { '0', '1', '2', '3', '4',
            '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

    public void append(int v, int radix) {

        if (v > radix) {
            append(v / radix, radix);
        }

        append(integerData[v % radix]);
    }

    public void append(int v) {
        append(v, 10);
    }

    public void append(String value) {
        int len = value.length();
        ensure(len);

        for (int i = 0; i < len; i++) {
            contents[pos++] = (byte) value.charAt(i);
        }
    }

    public void append(byte[] b) {
        append(b, 0, b.length);
    }

    public void append(ByteString b) {
        append(b.getData(), b.getOffset(), b.length());
    }

    public void append(byte[] b, int off, int len) {
        if (b.length == 0 || len == 0)
            return;
        ensure(len);
        System.arraycopy(b, off, contents, pos, len);
        pos += len;
    }

    public byte[] toByteArray() {
        byte[] barr = new byte[pos];
        System.arraycopy(contents, 0, barr, 0, pos);
        return barr;
    }

    public ByteString toByteString() {
        return new ByteString(contents, 0, pos);
    }

    public String toString() {
        return toByteString().toString();
    }

    private void ensure(int size) {
        if (pos + size > contents.length) {
            grow(pos + size);
        }
    }

    private void grow(int minimumSize) {
        int newSize = minimumSize > (contents.length * 2) ? minimumSize
                : (contents.length * 2);

        byte[] barr = new byte[newSize];
        System.arraycopy(contents, 0, barr, 0, contents.length);
        contents = barr;
    }

    public void writeTo(java.io.OutputStream out) throws java.io.IOException {
        writeFully(out, contents, 0, pos);
    }

    private void writeFully(java.io.OutputStream os, byte[] data, int off,
            int len) throws java.io.IOException {
        while (len > 0) {
            int bytes = len;
            try {
                os.write(data, off, len);
            } catch (java.io.InterruptedIOException ex) {
                bytes = ex.bytesTransferred;
            }

            off += bytes;
            len -= bytes;
        }
    }

    public byte[] getContents() {
        return contents;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy