Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright (c) 2013-2014 sagyf Yang. The Four Group.
   */
  
  package com.github.sog.kit.io;
  
  
This class implements an output stream in which the data is written into a byte array. The buffer automatically grows as data is written to it.

The data can be retrieved using toByteArray() and toString().

Closing a FastByteArrayOutputStream has no effect. The methods in this class can be called after the stream has been closed without generating an IOException.

This is an alternative implementation of the java.io.FastByteArrayOutputStream class. The original implementation only allocates 32 bytes at the beginning. As this class is designed for heavy duty it starts at 1024 bytes. In contrast to the original it doesn't reallocate the whole memory block but allocates additional buffers. This way no buffers need to be garbage collected and the contents don't have to be copied to the new buffer. This class is designed to behave exactly like the original. The only exception is the depreciated toString(int) method that has been ignored.

 
 public class FastByteArrayOutputStream extends OutputStream {
 
     private final FastByteBuffer buffer;

    
Creates a new byte array output stream. The buffer capacity is initially 1024 bytes, though its size increases if necessary.
 
     public FastByteArrayOutputStream() {
         this(1024);
     }

    
Creates a new byte array output stream, with a buffer capacity of the specified size, in bytes.

Parameters:
size the initial size.
Throws:
java.lang.IllegalArgumentException if size is negative.
 
     public FastByteArrayOutputStream(int size) {
          = new FastByteBuffer(size);
     }

    
 
     @Override
     public void write(byte[] bint offint len) {
         .append(bofflen);
     }

    
Writes single byte.
 
     @Override
     public void write(int b) {
         .append((byteb);
     }

    
 
     public int size() {
         return .size();
     }

    
Closing a FastByteArrayOutputStream has no effect. The methods in this class can be called after the stream has been closed without generating an IOException.
 
     @Override
     public void close() {
         //nop
     }

    
 
     public void reset() {
         .clear();
     }

    
    public void writeTo(OutputStream outthrows IOException {
        int index = .index();
        for (int i = 0; i < indexi++) {
            byte[] buf = .array(i);
            out.write(buf);
        }
        out.write(.array(index), 0, .offset());
    }

    
    public byte[] toByteArray() {
        return .toArray();
    }

    
    @Override
    public String toString() {
        return new String(toByteArray());
    }

    
    public String toString(String encthrows UnsupportedEncodingException {
        return new String(toByteArray(), enc);
    }
New to GrepCode? Check out our FAQ X