1c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou/*
2c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou * Copyright (C) 2012 The Android Open Source Project
3c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou *
4c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou * Licensed under the Apache License, Version 2.0 (the "License");
5c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou * you may not use this file except in compliance with the License.
6c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou * You may obtain a copy of the License at
7c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou *
8c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou *      http://www.apache.org/licenses/LICENSE-2.0
9c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou *
10c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou * Unless required by applicable law or agreed to in writing, software
11c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou * distributed under the License is distributed on an "AS IS" BASIS,
12c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou * See the License for the specific language governing permissions and
14c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou * limitations under the License.
15c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou */
16c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou
17a16e7b50f3148f581439509279f242092e254309ztenghuipackage com.android.camera.exif;
18c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou
19c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ouimport java.io.InputStream;
20c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ouimport java.nio.ByteBuffer;
21c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou
22c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ouclass ByteBufferInputStream extends InputStream {
23c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou
24c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou    private ByteBuffer mBuf;
25c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou
26c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou    public ByteBufferInputStream(ByteBuffer buf) {
27c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou        mBuf = buf;
28c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou    }
29c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou
30c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou    @Override
31c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou    public int read() {
32c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou        if (!mBuf.hasRemaining()) {
33c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou            return -1;
34c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou        }
35c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou        return mBuf.get() & 0xFF;
36c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou    }
37c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou
38c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou    @Override
39c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou    public int read(byte[] bytes, int off, int len) {
40c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou        if (!mBuf.hasRemaining()) {
41c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou            return -1;
42c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou        }
43c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou
44c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou        len = Math.min(len, mBuf.remaining());
45c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou        mBuf.get(bytes, off, len);
46c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou        return len;
47c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou    }
48c06c8045b159d68f8fda051d59a0eb82215067eeEarl Ou}
49