|  | @@ -37,7 +37,6 @@ import java.io.OutputStream;
 | 
	
		
			
				|  |  |  import java.io.UnsupportedEncodingException;
 | 
	
		
			
				|  |  |  import java.nio.ByteBuffer;
 | 
	
		
			
				|  |  |  import java.util.ArrayList;
 | 
	
		
			
				|  |  | -import java.util.Arrays;
 | 
	
		
			
				|  |  |  import java.util.Collection;
 | 
	
		
			
				|  |  |  import java.util.Iterator;
 | 
	
		
			
				|  |  |  import java.util.List;
 | 
	
	
		
			
				|  | @@ -776,6 +775,15 @@ public abstract class ByteString implements Iterable<Byte> {
 | 
	
		
			
				|  |  |        flushLastBuffer();
 | 
	
		
			
				|  |  |        return ByteString.copyFrom(flushedBuffers);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * Implement java.util.Arrays.copyOf() for jdk 1.5.
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private byte[] copyArray(byte[] buffer, int length) {
 | 
	
		
			
				|  |  | +      byte[] result = new byte[length];
 | 
	
		
			
				|  |  | +      System.arraycopy(buffer, 0, result, 0, Math.min(buffer.length, length));
 | 
	
		
			
				|  |  | +      return result;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * Writes the complete contents of this byte array output stream to
 | 
	
	
		
			
				|  | @@ -800,7 +808,7 @@ public abstract class ByteString implements Iterable<Byte> {
 | 
	
		
			
				|  |  |          byteString.writeTo(out);
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      out.write(Arrays.copyOf(cachedBuffer, cachedBufferPos));
 | 
	
		
			
				|  |  | +      out.write(copyArray(cachedBuffer, cachedBufferPos));
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
	
		
			
				|  | @@ -853,7 +861,7 @@ public abstract class ByteString implements Iterable<Byte> {
 | 
	
		
			
				|  |  |      private void flushLastBuffer()  {
 | 
	
		
			
				|  |  |        if (bufferPos < buffer.length) {
 | 
	
		
			
				|  |  |          if (bufferPos > 0) {
 | 
	
		
			
				|  |  | -          byte[] bufferCopy = Arrays.copyOf(buffer, bufferPos);
 | 
	
		
			
				|  |  | +          byte[] bufferCopy = copyArray(buffer, bufferPos);
 | 
	
		
			
				|  |  |            flushedBuffers.add(new LiteralByteString(bufferCopy));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          // We reuse this buffer for further writes.
 |