001: /*
002: * Copyright 1999-2004 The Apache Software Foundation.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: *
016: */
017:
018: /*
019: * The contents of this file are subject to the terms
020: * of the Common Development and Distribution License
021: * (the License). You may not use this file except in
022: * compliance with the License.
023: *
024: * You can obtain a copy of the license at
025: * https://glassfish.dev.java.net/public/CDDLv1.0.html.
026: * See the License for the specific language governing
027: * permissions and limitations under the License.
028: *
029: * When distributing Covered Code, include this CDDL
030: * Header Notice in each file and include the License file
031: * at https://glassfish.dev.java.net/public/CDDLv1.0.html.
032: * If applicable, add the following below the CDDL Header,
033: * with the fields enclosed by brackets [] replaced by
034: * you own identifying information:
035: * "Portions Copyrighted [year] [name of copyright owner]"
036: *
037: * Copyright 2006 Sun Microsystems Inc. All Rights Reserved
038: */
039:
040: package com.sun.xml.wss.impl.misc;
041:
042: import java.io.ByteArrayOutputStream;
043:
044: /**
045: * A simple Unsynced ByteArryOutputStream
046: * @author raul
047: *
048: */
049: public class UnsyncByteArrayOutputStream extends ByteArrayOutputStream {
050: int size = 4 * 1024;
051: //redefines member buf : But this is a class obtained from Apache, see license above
052: //Findbugs shows this as a correctness issue.
053: byte[] buf = null;
054: int pos = 0;
055:
056: public UnsyncByteArrayOutputStream() {
057: buf = new byte[size];
058: }
059:
060: public UnsyncByteArrayOutputStream(int size) {
061: this .size = size;
062: buf = new byte[size];
063: }
064:
065: /** @inheritDoc */
066: public void write(byte[] arg0) {
067: int newPos = pos + arg0.length;
068: if (newPos > size) {
069: expandSize();
070: }
071: System.arraycopy(arg0, 0, buf, pos, arg0.length);
072: pos = newPos;
073: }
074:
075: /** @inheritDoc */
076: public void write(byte[] arg0, int arg1, int arg2) {
077: int newPos = pos + arg2;
078: if (newPos > size) {
079: expandSize();
080: }
081: System.arraycopy(arg0, arg1, buf, pos, arg2);
082: pos = newPos;
083: }
084:
085: /** @inheritDoc */
086: public void write(int arg0) {
087: if (pos >= size) {
088: expandSize();
089: }
090: buf[pos++] = (byte) arg0;
091: }
092:
093: /** @inheritDoc */
094: public byte[] toByteArray() {
095: byte result[] = new byte[pos];
096: System.arraycopy(buf, 0, result, 0, pos);
097: return result;
098: }
099:
100: /** @inheritDoc */
101: public void reset() {
102: pos = 0;
103: }
104:
105: /** @inheritDoc */
106: void expandSize() {
107: int newSize = size << 2;
108: byte newBuf[] = new byte[newSize];
109: System.arraycopy(buf, 0, newBuf, 0, pos);
110: buf = newBuf;
111: size = newSize;
112: }
113:
114: public int getLength() {
115: return pos;
116: }
117:
118: public byte[] getBytes() {
119: return buf;
120: }
121: }
|