1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
/** Copyright (c) 2010 Scott A. Crosby. <scott@sacrosby.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package crosby.binary.file;
import java.io.Closeable;
import java.io.DataOutputStream;
import java.io.Flushable;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
public class BlockOutputStream implements Closeable, Flushable {
public BlockOutputStream(OutputStream output) {
this.outwrite = new DataOutputStream(output);
this.compression = CompressFlags.DEFLATE;
}
public void setCompress(CompressFlags flag) {
compression = flag;
}
public void setCompress(String s) {
if (s.equals("none"))
compression = CompressFlags.NONE;
else if (s.equals("deflate"))
compression = CompressFlags.DEFLATE;
else
throw new IllegalArgumentException("Unknown compression type: " + s);
}
/** Write a block with the stream's default compression flag */
public void write(FileBlock block) throws IOException {
this.write(block, compression);
}
/** Write a specific block with a specific compression flags */
public void write(FileBlock block, CompressFlags compression)
throws IOException {
FileBlockPosition ref = block.writeTo(outwrite, compression);
writtenblocks.add(ref);
}
@Override
public void flush() throws IOException {
outwrite.flush();
}
@Override
public void close() throws IOException {
outwrite.flush();
outwrite.close();
}
OutputStream outwrite;
List<FileBlockPosition> writtenblocks = new ArrayList<>();
CompressFlags compression;
}
|