diff options
| author | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
|---|---|---|
| committer | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
| commit | b691c43c44ff180d10e7d4a9afc83b98551ff586 (patch) | |
| tree | 3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.World/BufferedOutputStream.cpp | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.World/BufferedOutputStream.cpp')
| -rw-r--r-- | Minecraft.World/BufferedOutputStream.cpp | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/Minecraft.World/BufferedOutputStream.cpp b/Minecraft.World/BufferedOutputStream.cpp new file mode 100644 index 00000000..19fc95af --- /dev/null +++ b/Minecraft.World/BufferedOutputStream.cpp @@ -0,0 +1,87 @@ +#include "stdafx.h" + +#include "BufferedOutputStream.h" + +//Creates a new buffered output stream to write data to the specified underlying output stream with the specified buffer size. +//Parameters: +//out - the underlying output stream. +//size - the buffer size. +BufferedOutputStream::BufferedOutputStream(OutputStream *out, int size) +{ + stream = out; + buf = byteArray( size ); + count = 0; +} + +BufferedOutputStream::~BufferedOutputStream() +{ + delete buf.data; +} + +//Flushes this buffered output stream. This forces any buffered output bytes to be written out to the underlying output stream. +void BufferedOutputStream::flush() +{ + stream->write( buf, 0, count ); + + count = 0; +} + +//Closes this output stream and releases any system resources associated with the stream. +//The close method of FilterOutputStream calls its flush method, and then calls the close method of its underlying output stream. +void BufferedOutputStream::close() +{ + flush(); + stream->close(); +} + +//Writes len bytes from the specified byte array starting at offset off to this buffered output stream. +//Ordinarily this method stores bytes from the given array into this stream's buffer, flushing the buffer to the +//underlying output stream as needed. If the requested length is at least as large as this stream's buffer, however, +//then this method will flush the buffer and write the bytes directly to the underlying output stream. +//Thus redundant BufferedOutputStreams will not copy data unnecessarily. +// +//Overrides: +//write in class FilterOutputStream +//Parameters: +//b - the data. +//off - the start offset in the data. +//len - the number of bytes to write. +void BufferedOutputStream::write(byteArray b, unsigned int offset, unsigned int length) +{ + // Over the length of what we can store in our buffer - just flush the buffer and output directly + if( length >= buf.length ) + { + flush(); + stream->write(b, offset, length); + } + else + { + for(unsigned int i = 0; i < length; i++ ) + { + write( b[offset+i] ); + } + } +} + +//Writes b.length bytes to this output stream. +//The write method of FilterOutputStream calls its write method of three arguments with the arguments b, 0, and b.length. +// +//Note that this method does not call the one-argument write method of its underlying stream with the single argument b. +void BufferedOutputStream::write(byteArray b) +{ + write( b, 0, b.length ); +} + +//Writes the specified byte to this buffered output stream. +//Overrides: +//write in class FilterOutputStream +//Parameters: +//b - the byte to be written. +void BufferedOutputStream::write(unsigned int b) +{ + buf[count++] = (byte) b; + if( count == buf.length ) + { + flush(); + } +}
\ No newline at end of file |
