mirror of https://github.com/apache/activemq.git
Added test case to test resizing of internal buffer of DataByteArrayOutputStream.
Fix bug during resizing of internal buffer of DataByteArrayOutputStream. git-svn-id: https://svn.apache.org/repos/asf/incubator/activemq/trunk@472258 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
0c93dfde72
commit
c636b3798f
|
@ -138,29 +138,29 @@ public final class DataByteArrayOutputStream extends OutputStream implements Dat
|
||||||
|
|
||||||
|
|
||||||
public void writeBoolean(boolean v){
|
public void writeBoolean(boolean v){
|
||||||
ensureEnoughBuffer(1);
|
ensureEnoughBuffer(pos + 1);
|
||||||
buf[pos++]=(byte) (v?1:0);
|
buf[pos++]=(byte) (v?1:0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeByte(int v){
|
public void writeByte(int v){
|
||||||
ensureEnoughBuffer(1);
|
ensureEnoughBuffer(pos + 1);
|
||||||
buf[pos++]=(byte) (v>>>0);
|
buf[pos++]=(byte) (v>>>0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeShort(int v){
|
public void writeShort(int v){
|
||||||
ensureEnoughBuffer(2);
|
ensureEnoughBuffer(pos + 2);
|
||||||
buf[pos++]=(byte) (v>>>8);
|
buf[pos++]=(byte) (v>>>8);
|
||||||
buf[pos++]=(byte) (v>>>0);
|
buf[pos++]=(byte) (v>>>0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeChar(int v){
|
public void writeChar(int v){
|
||||||
ensureEnoughBuffer(2);
|
ensureEnoughBuffer(pos + 2);
|
||||||
buf[pos++]=(byte) (v>>>8);
|
buf[pos++]=(byte) (v>>>8);
|
||||||
buf[pos++]=(byte) (v>>>0);
|
buf[pos++]=(byte) (v>>>0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeInt(int v){
|
public void writeInt(int v){
|
||||||
ensureEnoughBuffer(4);
|
ensureEnoughBuffer(pos + 4);
|
||||||
buf[pos++]=(byte) (v>>>24);
|
buf[pos++]=(byte) (v>>>24);
|
||||||
buf[pos++]=(byte) (v>>>16);
|
buf[pos++]=(byte) (v>>>16);
|
||||||
buf[pos++]=(byte) (v>>>8);
|
buf[pos++]=(byte) (v>>>8);
|
||||||
|
@ -168,7 +168,7 @@ public final class DataByteArrayOutputStream extends OutputStream implements Dat
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeLong(long v){
|
public void writeLong(long v){
|
||||||
ensureEnoughBuffer(8);
|
ensureEnoughBuffer(pos + 8);
|
||||||
buf[pos++]=(byte) (v>>>56);
|
buf[pos++]=(byte) (v>>>56);
|
||||||
buf[pos++]=(byte) (v>>>48);
|
buf[pos++]=(byte) (v>>>48);
|
||||||
buf[pos++]=(byte) (v>>>40);
|
buf[pos++]=(byte) (v>>>40);
|
||||||
|
@ -219,7 +219,7 @@ public final class DataByteArrayOutputStream extends OutputStream implements Dat
|
||||||
}
|
}
|
||||||
if(encodedsize>65535)
|
if(encodedsize>65535)
|
||||||
throw new UTFDataFormatException("encoded string too long: "+encodedsize+" bytes");
|
throw new UTFDataFormatException("encoded string too long: "+encodedsize+" bytes");
|
||||||
ensureEnoughBuffer(encodedsize+2);
|
ensureEnoughBuffer(pos + encodedsize+2);
|
||||||
writeShort(encodedsize);
|
writeShort(encodedsize);
|
||||||
int i=0;
|
int i=0;
|
||||||
for(i=0;i<strlen;i++){
|
for(i=0;i<strlen;i++){
|
||||||
|
|
|
@ -0,0 +1,101 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* 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.activemq.util;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class DataByteArrayOutputStreamTest extends TestCase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This test case assumes that an ArrayIndexOutOfBoundsException will be thrown when the buffer fails to resize
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public void testResize() throws IOException {
|
||||||
|
int initSize = 64;
|
||||||
|
DataByteArrayOutputStream out = new DataByteArrayOutputStream();
|
||||||
|
|
||||||
|
fillOut(out, initSize);
|
||||||
|
// Should resized here
|
||||||
|
out.writeBoolean(true);
|
||||||
|
|
||||||
|
fillOut(out, initSize);
|
||||||
|
// Should resized here
|
||||||
|
out.writeByte(1);
|
||||||
|
|
||||||
|
fillOut(out, initSize);
|
||||||
|
// Should resized here
|
||||||
|
out.writeBytes("test");
|
||||||
|
|
||||||
|
fillOut(out, initSize);
|
||||||
|
// Should resized here
|
||||||
|
out.writeChar('C');
|
||||||
|
|
||||||
|
fillOut(out, initSize);
|
||||||
|
// Should resized here
|
||||||
|
out.writeChars("test");
|
||||||
|
|
||||||
|
fillOut(out, initSize);
|
||||||
|
// Should resized here
|
||||||
|
out.writeDouble(3.1416);
|
||||||
|
|
||||||
|
fillOut(out, initSize);
|
||||||
|
// Should resized here
|
||||||
|
out.writeFloat((float)3.1416);
|
||||||
|
|
||||||
|
fillOut(out, initSize);
|
||||||
|
// Should resized here
|
||||||
|
out.writeInt(12345);
|
||||||
|
|
||||||
|
fillOut(out, initSize);
|
||||||
|
// Should resized here
|
||||||
|
out.writeLong(12345);
|
||||||
|
|
||||||
|
fillOut(out, initSize);
|
||||||
|
// Should resized here
|
||||||
|
out.writeShort(1234);
|
||||||
|
|
||||||
|
fillOut(out, initSize);
|
||||||
|
// Should resized here
|
||||||
|
out.writeUTF("test");
|
||||||
|
|
||||||
|
fillOut(out, initSize);
|
||||||
|
// Should resized here
|
||||||
|
out.write(1234);
|
||||||
|
|
||||||
|
fillOut(out, initSize);
|
||||||
|
// Should resized here
|
||||||
|
out.write(new byte[10], 5, 5);
|
||||||
|
|
||||||
|
fillOut(out, initSize);
|
||||||
|
// Should resized here
|
||||||
|
out.write(new byte[10]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method restarts the stream to the init size, and fills it up with data
|
||||||
|
* @param out
|
||||||
|
* @param size
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public void fillOut(DataByteArrayOutputStream out, int size) throws IOException {
|
||||||
|
out.restart(size);
|
||||||
|
out.write(new byte[size]);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue