14ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/* 24ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Licensed to the Apache Software Foundation (ASF) under one or more 34ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * contributor license agreements. See the NOTICE file distributed with 44ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * this work for additional information regarding copyright ownership. 54ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * The ASF licenses this file to You under the Apache License, Version 2.0 64ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * (the "License"); you may not use this file except in compliance with 74ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * the License. You may obtain a copy of the License at 84ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 94ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * http://www.apache.org/licenses/LICENSE-2.0 104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Unless required by applicable law or agreed to in writing, software 124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * distributed under the License is distributed on an "AS IS" BASIS, 134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * See the License for the specific language governing permissions and 154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * limitations under the License. 164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapackage org.apache.commons.io.output; 184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.io.IOException; 204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.io.OutputStream; 214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/** 244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * An output stream which triggers an event when a specified number of bytes of 254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * data have been written to it. The event can be used, for example, to throw 264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * an exception if a maximum has been reached, or to switch the underlying 274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * stream type when the threshold is exceeded. 284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * <p> 294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * This class overrides all <code>OutputStream</code> methods. However, these 304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * overrides ultimately call the corresponding methods in the underlying output 314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * stream implementation. 324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * <p> 334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * NOTE: This implementation may trigger the event <em>before</em> the threshold 344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * is actually reached, since it triggers when a pending write operation would 354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * cause the threshold to be exceeded. 364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @author <a href="mailto:martinc@apache.org">Martin Cooper</a> 384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @version $Id: ThresholdingOutputStream.java 540714 2007-05-22 19:39:44Z niallp $ 404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapublic abstract class ThresholdingOutputStream 424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira extends OutputStream 434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{ 444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira // ----------------------------------------------------------- Data members 464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * The threshold at which the event will be triggered. 504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira private int threshold; 524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * The number of bytes written to the output stream. 564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira private long written; 584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 604ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Whether or not the configured threshold has been exceeded. 624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira private boolean thresholdExceeded; 644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 654ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 664ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira // ----------------------------------------------------------- Constructors 674ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 684ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 694ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Constructs an instance of this class which will trigger an event at the 714ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * specified threshold. 724ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 734ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param threshold The number of bytes at which to trigger an event. 744ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 754ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public ThresholdingOutputStream(int threshold) 764ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira { 774ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this.threshold = threshold; 784ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 794ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 804ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 814ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira // --------------------------------------------------- OutputStream methods 824ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 834ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 844ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 854ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Writes the specified byte to this output stream. 864ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 874ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param b The byte to be written. 884ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 894ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @exception IOException if an error occurs. 904ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 914ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public void write(int b) throws IOException 924ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira { 934ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira checkThreshold(1); 944ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira getStream().write(b); 954ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira written++; 964ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 974ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 984ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 994ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1004ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Writes <code>b.length</code> bytes from the specified byte array to this 1014ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * output stream. 1024ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 1034ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param b The array of bytes to be written. 1044ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 1054ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @exception IOException if an error occurs. 1064ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1074ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public void write(byte b[]) throws IOException 1084ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira { 1094ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira checkThreshold(b.length); 1104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira getStream().write(b); 1114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira written += b.length; 1124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Writes <code>len</code> bytes from the specified byte array starting at 1174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * offset <code>off</code> to this output stream. 1184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 1194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param b The byte array from which the data will be written. 1204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param off The start offset in the byte array. 1214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param len The number of bytes to write. 1224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 1234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @exception IOException if an error occurs. 1244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public void write(byte b[], int off, int len) throws IOException 1264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira { 1274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira checkThreshold(len); 1284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira getStream().write(b, off, len); 1294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira written += len; 1304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Flushes this output stream and forces any buffered output bytes to be 1354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * written out. 1364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 1374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @exception IOException if an error occurs. 1384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public void flush() throws IOException 1404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira { 1414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira getStream().flush(); 1424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Closes this output stream and releases any system resources associated 1474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * with this stream. 1484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 1494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @exception IOException if an error occurs. 1504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public void close() throws IOException 1524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira { 1534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira try 1544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira { 1554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira flush(); 1564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira catch (IOException ignored) 1584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira { 1594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira // ignore 1604ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira getStream().close(); 1624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1654ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira // --------------------------------------------------------- Public methods 1664ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1674ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1684ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1694ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Returns the threshold, in bytes, at which an event will be triggered. 1704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 1714ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @return The threshold point, in bytes. 1724ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1734ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public int getThreshold() 1744ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira { 1754ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return threshold; 1764ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1774ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1784ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1794ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1804ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Returns the number of bytes that have been written to this output stream. 1814ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 1824ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @return The number of bytes written. 1834ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1844ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public long getByteCount() 1854ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira { 1864ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return written; 1874ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1884ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1894ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1904ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1914ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Determines whether or not the configured threshold has been exceeded for 1924ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * this output stream. 1934ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 1944ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @return <code>true</code> if the threshold has been reached; 1954ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * <code>false</code> otherwise. 1964ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1974ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public boolean isThresholdExceeded() 1984ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira { 1994ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return (written > threshold); 2004ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 2014ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 2024ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 2034ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira // ------------------------------------------------------ Protected methods 2044ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 2054ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 2064ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 2074ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Checks to see if writing the specified number of bytes would cause the 2084ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * configured threshold to be exceeded. If so, triggers an event to allow 2094ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * a concrete implementation to take action on this. 2104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 2114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param count The number of bytes about to be written to the underlying 2124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * output stream. 2134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 2144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @exception IOException if an error occurs. 2154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 2164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira protected void checkThreshold(int count) throws IOException 2174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira { 2184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (!thresholdExceeded && (written + count > threshold)) 2194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira { 2204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira thresholdExceeded = true; 2214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira thresholdReached(); 2224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 2234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 2244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 2254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 2264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Resets the byteCount to zero. You can call this from 2274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * {@link #thresholdReached()} if you want the event to be triggered again. 2284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 2294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira protected void resetByteCount() 2304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira { 2314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this.thresholdExceeded = false; 2324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this.written = 0; 2334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 2344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 2354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira // ------------------------------------------------------- Abstract methods 2364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 2374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 2384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 2394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Returns the underlying output stream, to which the corresponding 2404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * <code>OutputStream</code> methods in this class will ultimately delegate. 2414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 2424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @return The underlying output stream. 2434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 2444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @exception IOException if an error occurs. 2454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 2464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira protected abstract OutputStream getStream() throws IOException; 2474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 2484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 2494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 2504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Indicates that the configured threshold has been reached, and that a 2514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * subclass should take whatever action necessary on this event. This may 2524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * include changing the underlying output stream. 2534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 2544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @exception IOException if an error occurs. 2554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 2564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira protected abstract void thresholdReached() throws IOException; 2574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira} 258