⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fastbytearrayoutputstream.java

📁 webwork source
💻 JAVA
字号:
/* * WebWork, Web Application Framework * * Distributable under Apache license. * See terms of license at opensource.org */package webwork.util;import javax.servlet.jsp.JspWriter;import java.io.*;import java.util.LinkedList;import java.util.Iterator;/** * A speedy implementation of ByteArrayOutputStream. It's not synchronized, and it * does not copy buffers when it's expanded. There's also no copying of the internal buffer * if it's contents is extracted with the writeTo(stream) method. * * @author Rickard 謆erg * @version $Revision: 1.3 $ */public class FastByteArrayOutputStream   extends OutputStream{   // Static --------------------------------------------------------   private static final int DEFAULT_BLOCK_SIZE = 8192;   // Attributes ----------------------------------------------------   // internal buffer   private byte[] buffer;   private LinkedList buffers;   private int index;   private int size;   private int blockSize;   // is the stream closed?   private boolean closed;   // Constructors --------------------------------------------------   public FastByteArrayOutputStream()   {      this(DEFAULT_BLOCK_SIZE);   }   public FastByteArrayOutputStream(int aSize)   {      blockSize = aSize;      buffer = new byte[blockSize];   }   // Public   public void writeTo(OutputStream out) throws IOException   {      // Check if we have a list of buffers      if (buffers != null)      {         Iterator enum = buffers.iterator();         while (enum.hasNext())         {            byte[] bytes = (byte[]) enum.next();            out.write(bytes, 0, blockSize);         }      }      // write the internal buffer directly      out.write(buffer, 0, index);   }   public void writeTo(RandomAccessFile out) throws IOException   {      // Check if we have a list of buffers      if (buffers != null)      {         Iterator enum = buffers.iterator();         while (enum.hasNext())         {            byte[] bytes = (byte[]) enum.next();            out.write(bytes, 0, blockSize);         }      }      // write the internal buffer directly      out.write(buffer, 0, index);   }   public void writeTo(JspWriter out, String encoding) throws IOException   {      // Check if we have a list of buffers      if (buffers != null)      {         Iterator enum = buffers.iterator();         while (enum.hasNext())         {            byte[] bytes = (byte[]) enum.next();            if (encoding != null)               out.write(new String(bytes, encoding));            else               out.write(new String(bytes));         }      }      // write the internal buffer directly      if (encoding != null)         out.write(new String(buffer, 0, index, encoding));      else         out.write(new String(buffer, 0, index));   }   public int getSize()   {      return size+index;   }   public byte[] toByteArray()   {      byte[] data = new byte[getSize()];      // Check if we have a list of buffers      int pos = 0;      if (buffers != null)      {         Iterator enum = buffers.iterator();         while (enum.hasNext())         {            byte[] bytes = (byte[]) enum.next();            System.arraycopy(bytes,0,data,pos,blockSize);            pos+=blockSize;         }      }      // write the internal buffer directly      System.arraycopy(buffer, 0, data, pos, index);      return data;   }   public String toString()   {      return new String(toByteArray());   }   /**   * Create a new buffer and store the   * current one in linked list   */   protected void addBuffer()   {      if (buffers == null)         buffers = new LinkedList();      buffers.addLast(buffer);      buffer = new byte[blockSize];      size += index;      index = 0;   }   // OutputStream overrides ----------------------------------------   public void write(int datum) throws IOException   {      if (closed)      {         throw new IOException("Stream closed");      } else      {         if (index == blockSize)            addBuffer();         // store the byte         buffer[index++] = (byte) datum;      }   }   public void write(byte[] data, int offset, int length)      throws IOException   {      if (data == null)      {         throw new NullPointerException();      } else if ((offset < 0) || (offset + length > data.length)         || (length < 0))      {         throw new IndexOutOfBoundsException();      } else if (closed)      {         throw new IOException("Stream closed");      } else      {         if (index + length > blockSize)         {            int copyLength;            do            {               if (index==blockSize)                  addBuffer();               copyLength = blockSize-index;               if (length < copyLength)                  copyLength = length;               System.arraycopy(data, offset, buffer, index, copyLength);               offset += copyLength;               index += copyLength;               length -= copyLength;            } while (length > 0);         } else         {            // Copy in the subarray            System.arraycopy(data, offset, buffer, index, length);            index += length;         }      }   }      public void close()   {      closed = true;   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -