All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.qcloud.cos.internal.crypto.RenewableCipherLiteInputStream Maven / Gradle / Ivy

There is a newer version: 5.6.238.2
Show newest version
/*
 * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file 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.
 
 * According to cos feature, we modify some class,comment, field name, etc.
 */


package com.qcloud.cos.internal.crypto;

import java.io.IOException;
import java.io.InputStream;

/**
 * A specific kind of {@link CipherLiteInputStream} that supports partial
 * mark-and-reset in the sense that, if the underlying input stream supports
 * mark-and-reset, this input stream can then be marked at and get reset back to
 * the very beginning of the stream (but not anywhere else).
 */
public final class RenewableCipherLiteInputStream extends CipherLiteInputStream {
    private boolean hasBeenAccessed;

    public RenewableCipherLiteInputStream(InputStream is, CipherLite cipherLite) {
        super(is, cipherLite);
    }

    public RenewableCipherLiteInputStream(InputStream is, CipherLite c,
            int buffsize) {
        super(is, c, buffsize);
    }

    public RenewableCipherLiteInputStream(InputStream is, CipherLite c,
            int buffsize, boolean multipart, boolean lastMultiPart) {
        super(is, c, buffsize, multipart, lastMultiPart);
    }

    protected RenewableCipherLiteInputStream(InputStream is) {
        super(is);
    }

    /**
     * Mark and reset is currently only partially supported, in the sense that,
     * if the underlying input stream supports mark-and-reset, this input stream
     * can then be marked at and get reset back to the very beginning of the
     * stream (but not anywhere else).
     */
    @Override
    public boolean markSupported() {
        abortIfNeeded();
        return in.markSupported();
    }

    /**
     * Mark and reset is currently only partially supported, in the sense that,
     * if the underlying input stream supports mark-and-reset, this input stream
     * can then be marked at and get reset back to the very beginning of the
     * stream (but not anywhere else).
     * 
     * @throws UnsupportedOperationException
     *             if mark is called after this stream has been accessed.
     */
    @Override
    public void mark(final int readlimit) {
        abortIfNeeded();
        if (hasBeenAccessed) {
            throw new UnsupportedOperationException(
                    "Marking is only supported before your first call to "
                            + "read or skip.");
        }
        in.mark(readlimit);
    }

    /**
     * Resets back to the very beginning of the stream.
     * 

* Mark and reset is currently only partially supported, in the sense that, * if the underlying input stream supports mark-and-reset, this input stream * can then be marked at and get reset back to the very beginning of the * stream (but not anywhere else). */ @Override public void reset() throws IOException { abortIfNeeded(); in.reset(); renewCipherLite(); resetInternal(); hasBeenAccessed = false; } @Override public int read() throws IOException { hasBeenAccessed = true; return super.read(); } @Override public int read(final byte[] b) throws IOException { hasBeenAccessed = true; return super.read(b); } @Override public int read(final byte[] b, final int off, final int len) throws IOException { hasBeenAccessed = true; return super.read(b, off, len); } @Override public long skip(final long n) throws IOException { hasBeenAccessed = true; return super.skip(n); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy