13f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen/*
23f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen * Copyright (C) 2015 The Android Open Source Project
33f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen *
43f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen * Licensed under the Apache License, Version 2.0 (the "License");
53f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen * you may not use this file except in compliance with the License.
63f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen * You may obtain a copy of the License at
73f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen *
83f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen *      http://www.apache.org/licenses/LICENSE-2.0
93f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen *
103f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen * Unless required by applicable law or agreed to in writing, software
113f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen * distributed under the License is distributed on an "AS IS" BASIS,
123f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen * See the License for the specific language governing permissions and
143f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen * limitations under the License.
153f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen */
163f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chenpackage com.android.phone.common.mail.utility;
173f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen
183f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chenimport java.io.IOException;
193f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chenimport java.io.OutputStream;
203f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen
213f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen/**
223f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen * A simple pass-thru OutputStream that also counts how many bytes are written to it and
233f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen * makes that count available to callers.
243f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen */
253f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chenpublic class CountingOutputStream extends OutputStream {
263f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen    private long mCount;
273f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen    private final OutputStream mOutputStream;
283f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen
293f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen    public CountingOutputStream(OutputStream outputStream) {
303f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen        mOutputStream = outputStream;
313f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen    }
323f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen
333f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen    public long getCount() {
343f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen        return mCount;
353f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen    }
363f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen
373f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen    @Override
383f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen    public void write(byte[] buffer, int offset, int count) throws IOException {
393f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen        mOutputStream.write(buffer, offset, count);
403f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen        mCount += count;
413f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen    }
423f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen
433f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen    @Override
443f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen    public void write(int oneByte) throws IOException {
453f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen        mOutputStream.write(oneByte);
463f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen        mCount++;
473f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen    }
483f51d09afa61649a1bcf02599bc1df5aafccf088Nancy Chen}