From 5d5d2c3c36c77b22a90acae33adb6908c4d7b5d9 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Tue, 17 May 2016 21:13:41 +0200 Subject: refactor BackupOperation a bit, make more illegal states explicit --- .../keychain/util/CountingOutputStream.java | 65 ++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/CountingOutputStream.java (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/CountingOutputStream.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/CountingOutputStream.java new file mode 100644 index 000000000..8bfe26aeb --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/CountingOutputStream.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2007 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.sufficientlysecure.keychain.util; + + +import java.io.FilterOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +import android.support.annotation.NonNull; + + +public final class CountingOutputStream extends FilterOutputStream { + + private long count; + + /** + * Wraps another output stream, counting the number of bytes written. + * + * @param out + * the output stream to be wrapped + */ + public CountingOutputStream(@NonNull OutputStream out) { + super(out); + } + + /** + * Returns the number of bytes written. + */ + public long getCount() { + return count; + } + + @Override + public void write(@NonNull byte[] b, int off, int len) throws IOException { + out.write(b, off, len); + count += len; + } + + @Override + public void write(int b) throws IOException { + out.write(b); + count++; + } + + // Overriding close() because FilterOutputStream's close() method pre-JDK8 has bad behavior: + // it silently ignores any exception thrown by flush(). Instead, just close the delegate stream. + // It should flush itself if necessary. + @Override + public void close() throws IOException { + out.close(); + } +} \ No newline at end of file -- cgit v1.2.3