196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/* 296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * this work for additional information regarding copyright ownership. 596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * (the "License"); you may not use this file except in compliance with 796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * the License. You may obtain a copy of the License at 896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 1096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 1196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * See the License for the specific language governing permissions and 1596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * limitations under the License. 1696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 1796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpackage org.apache.commons.io.output; 1896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 1996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.IOException; 2096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.OutputStream; 2196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 2296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 2396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/** 2496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * An output stream which triggers an event when a specified number of bytes of 2596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * data have been written to it. The event can be used, for example, to throw 2696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * an exception if a maximum has been reached, or to switch the underlying 2796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * stream type when the threshold is exceeded. 2896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p> 2996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * This class overrides all <code>OutputStream</code> methods. However, these 3096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * overrides ultimately call the corresponding methods in the underlying output 3196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * stream implementation. 3296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p> 3396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * NOTE: This implementation may trigger the event <em>before</em> the threshold 3496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * is actually reached, since it triggers when a pending write operation would 3596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * cause the threshold to be exceeded. 3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 3796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author <a href="mailto:martinc@apache.org">Martin Cooper</a> 3896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 3996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @version $Id: ThresholdingOutputStream.java 540714 2007-05-22 19:39:44Z niallp $ 4096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 4196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpublic abstract class ThresholdingOutputStream 4296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project extends OutputStream 4396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project{ 4496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 4596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ----------------------------------------------------------- Data members 4696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 4796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 4896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 4996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * The threshold at which the event will be triggered. 5096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 5196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private int threshold; 5296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 5396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 5496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 5596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * The number of bytes written to the output stream. 5696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 5796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private long written; 5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 5996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Whether or not the configured threshold has been exceeded. 6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private boolean thresholdExceeded; 6496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 6596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ----------------------------------------------------------- Constructors 6796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 6896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 7096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Constructs an instance of this class which will trigger an event at the 7196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * specified threshold. 7296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 7396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param threshold The number of bytes at which to trigger an event. 7496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 7596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public ThresholdingOutputStream(int threshold) 7696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 7796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project this.threshold = threshold; 7896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 7996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 8096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 8196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // --------------------------------------------------- OutputStream methods 8296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 8396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 8496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 8596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Writes the specified byte to this output stream. 8696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 8796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param b The byte to be written. 8896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 8996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @exception IOException if an error occurs. 9096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 9196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void write(int b) throws IOException 9296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 9396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project checkThreshold(1); 9496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project getStream().write(b); 9596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project written++; 9696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 9796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 9896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 9996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 10096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Writes <code>b.length</code> bytes from the specified byte array to this 10196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * output stream. 10296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 10396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param b The array of bytes to be written. 10496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 10596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @exception IOException if an error occurs. 10696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 10796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void write(byte b[]) throws IOException 10896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 10996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project checkThreshold(b.length); 11096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project getStream().write(b); 11196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project written += b.length; 11296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 11396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 11496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 11596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 11696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Writes <code>len</code> bytes from the specified byte array starting at 11796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * offset <code>off</code> to this output stream. 11896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 11996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param b The byte array from which the data will be written. 12096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param off The start offset in the byte array. 12196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param len The number of bytes to write. 12296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 12396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @exception IOException if an error occurs. 12496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 12596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void write(byte b[], int off, int len) throws IOException 12696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 12796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project checkThreshold(len); 12896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project getStream().write(b, off, len); 12996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project written += len; 13096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 13196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 13296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 13396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 13496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Flushes this output stream and forces any buffered output bytes to be 13596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * written out. 13696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 13796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @exception IOException if an error occurs. 13896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 13996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void flush() throws IOException 14096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 14196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project getStream().flush(); 14296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 14396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 14496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 14596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 14696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Closes this output stream and releases any system resources associated 14796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * with this stream. 14896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 14996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @exception IOException if an error occurs. 15096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 15196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void close() throws IOException 15296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 15396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project try 15496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 15596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project flush(); 15696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 15796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project catch (IOException ignored) 15896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 15996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ignore 16096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 16196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project getStream().close(); 16296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 16396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 16496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 16596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // --------------------------------------------------------- Public methods 16696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 16796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 16896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 16996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Returns the threshold, in bytes, at which an event will be triggered. 17096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 17196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return The threshold point, in bytes. 17296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 17396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public int getThreshold() 17496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 17596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return threshold; 17696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 17796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 17896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 17996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 18096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Returns the number of bytes that have been written to this output stream. 18196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 18296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return The number of bytes written. 18396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 18496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public long getByteCount() 18596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 18696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return written; 18796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 18896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 18996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 19096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 19196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Determines whether or not the configured threshold has been exceeded for 19296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * this output stream. 19396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 19496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return <code>true</code> if the threshold has been reached; 19596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <code>false</code> otherwise. 19696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 19796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public boolean isThresholdExceeded() 19896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 19996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return (written > threshold); 20096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 20196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 20296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 20396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ------------------------------------------------------ Protected methods 20496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 20596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 20696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 20796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Checks to see if writing the specified number of bytes would cause the 20896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * configured threshold to be exceeded. If so, triggers an event to allow 20996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * a concrete implementation to take action on this. 21096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 21196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param count The number of bytes about to be written to the underlying 21296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * output stream. 21396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 21496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @exception IOException if an error occurs. 21596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 21696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project protected void checkThreshold(int count) throws IOException 21796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 21896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project if (!thresholdExceeded && (written + count > threshold)) 21996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 22096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project thresholdExceeded = true; 22196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project thresholdReached(); 22296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 22396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 22496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 22596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 22696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Resets the byteCount to zero. You can call this from 22796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * {@link #thresholdReached()} if you want the event to be triggered again. 22896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 22996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project protected void resetByteCount() 23096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 23196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project this.thresholdExceeded = false; 23296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project this.written = 0; 23396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 23496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 23596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ------------------------------------------------------- Abstract methods 23696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 23796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 23896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 23996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Returns the underlying output stream, to which the corresponding 24096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <code>OutputStream</code> methods in this class will ultimately delegate. 24196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 24296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return The underlying output stream. 24396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 24496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @exception IOException if an error occurs. 24596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 24696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project protected abstract OutputStream getStream() throws IOException; 24796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 24896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 24996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 25096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Indicates that the configured threshold has been reached, and that a 25196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * subclass should take whatever action necessary on this event. This may 25296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * include changing the underlying output stream. 25396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 25496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @exception IOException if an error occurs. 25596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 25696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project protected abstract void thresholdReached() throws IOException; 25796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project} 258