BufferedOutputStream.h
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:2k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. /*
  2.  *  OpenKore C++ Standard Library
  3.  *  Copyright (C) 2006  VCL
  4.  *
  5.  *  This library is free software; you can redistribute it and/or
  6.  *  modify it under the terms of the GNU Lesser General Public
  7.  *  License as published by the Free Software Foundation; either
  8.  *  version 2.1 of the License, or (at your option) any later version.
  9.  *
  10.  *  This library is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  *  Lesser General Public License for more details.
  14.  *
  15.  *  You should have received a copy of the GNU Lesser General Public
  16.  *  License along with this library; if not, write to the Free Software
  17.  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  18.  *  MA  02110-1301  USA
  19.  */
  20. #ifndef _OSL_BUFFERED_OUTPUT_STREAM_H_
  21. #define _OSL_BUFFERED_OUTPUT_STREAM_H_
  22. #include "OutputStream.h"
  23. namespace OSL {
  24. /**
  25.  * An output stream which wraps another output stream, and buffers
  26.  * a certain amount of data before flushing them, instead of writing
  27.  * data immediately. This results in better performance for some
  28.  * output streams.
  29.  *
  30.  * When a BufferedOutputStream is closed or deleted, its underlying
  31.  * output stream is also closed, and dereferenced.
  32.  *
  33.  * This implementation is NOT thread-safe!
  34.  *
  35.  * @class BufferedOutputStream OSL/IO/BufferedOutputStream.h
  36.  * @ingroup IO
  37.  */
  38. class BufferedOutputStream: public OutputStream {
  39. private:
  40. /** The wrapped stream. Can be NULL. */
  41. OutputStream *stream;
  42. /**
  43.  * The buffer.
  44.  * @invariant (stream != NULL) == (buffer != NULL)
  45.  */
  46. char *buffer;
  47. /** The maximum buffer size. */
  48. unsigned int maxsize;
  49. /**
  50.  * The number of valid bytes in the buffer.
  51.  * @invariant 0 <= count <= maxsize
  52.  */
  53. unsigned int count;
  54. public:
  55. /** The default buffer size. */
  56. static const unsigned int DEFAULT_BUFFER_SIZE = 512;
  57. /**
  58.  * Create a new BufferedOutputStream.
  59.  * stream's reference count will be increased by 1.
  60.  *
  61.  * @param stream The output stream to wrap.
  62.  * @param size   The maximum size of the buffer.
  63.  * @post stream != NULL
  64.  */
  65. BufferedOutputStream(OutputStream *stream, unsigned int size = DEFAULT_BUFFER_SIZE);
  66. ~BufferedOutputStream();
  67. virtual void close();
  68. virtual void flush() throw(IOException);
  69. virtual unsigned int write(const char *data, unsigned int size) throw(IOException);
  70. };
  71. }
  72. #endif /* _OSL_BUFFERED_OUTPUT_STREAM_H_ */