1104c45677660586026a7e74ef8c47d396403d50eMichael Jurka/* 2104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * Copyright (C) 2012 The Android Open Source Project 3104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * 4104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * Licensed under the Apache License, Version 2.0 (the "License"); 5104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * you may not use this file except in compliance with the License. 6104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * You may obtain a copy of the License at 7104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * 8104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * http://www.apache.org/licenses/LICENSE-2.0 9104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * 10104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * Unless required by applicable law or agreed to in writing, software 11104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * distributed under the License is distributed on an "AS IS" BASIS, 12104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * See the License for the specific language governing permissions and 14104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * limitations under the License. 15104c45677660586026a7e74ef8c47d396403d50eMichael Jurka */ 16104c45677660586026a7e74ef8c47d396403d50eMichael Jurka 17104c45677660586026a7e74ef8c47d396403d50eMichael Jurkapackage com.android.gallery3d.exif; 18104c45677660586026a7e74ef8c47d396403d50eMichael Jurka 19104c45677660586026a7e74ef8c47d396403d50eMichael Jurkaimport java.io.InputStream; 20104c45677660586026a7e74ef8c47d396403d50eMichael Jurkaimport java.nio.ByteBuffer; 21104c45677660586026a7e74ef8c47d396403d50eMichael Jurka 22104c45677660586026a7e74ef8c47d396403d50eMichael Jurkaclass ByteBufferInputStream extends InputStream { 23104c45677660586026a7e74ef8c47d396403d50eMichael Jurka 24104c45677660586026a7e74ef8c47d396403d50eMichael Jurka private ByteBuffer mBuf; 25104c45677660586026a7e74ef8c47d396403d50eMichael Jurka 26104c45677660586026a7e74ef8c47d396403d50eMichael Jurka public ByteBufferInputStream(ByteBuffer buf) { 27104c45677660586026a7e74ef8c47d396403d50eMichael Jurka mBuf = buf; 28104c45677660586026a7e74ef8c47d396403d50eMichael Jurka } 29104c45677660586026a7e74ef8c47d396403d50eMichael Jurka 30104c45677660586026a7e74ef8c47d396403d50eMichael Jurka @Override 31104c45677660586026a7e74ef8c47d396403d50eMichael Jurka public int read() { 32104c45677660586026a7e74ef8c47d396403d50eMichael Jurka if (!mBuf.hasRemaining()) { 33104c45677660586026a7e74ef8c47d396403d50eMichael Jurka return -1; 34104c45677660586026a7e74ef8c47d396403d50eMichael Jurka } 35104c45677660586026a7e74ef8c47d396403d50eMichael Jurka return mBuf.get() & 0xFF; 36104c45677660586026a7e74ef8c47d396403d50eMichael Jurka } 37104c45677660586026a7e74ef8c47d396403d50eMichael Jurka 38104c45677660586026a7e74ef8c47d396403d50eMichael Jurka @Override 39104c45677660586026a7e74ef8c47d396403d50eMichael Jurka public int read(byte[] bytes, int off, int len) { 40104c45677660586026a7e74ef8c47d396403d50eMichael Jurka if (!mBuf.hasRemaining()) { 41104c45677660586026a7e74ef8c47d396403d50eMichael Jurka return -1; 42104c45677660586026a7e74ef8c47d396403d50eMichael Jurka } 43104c45677660586026a7e74ef8c47d396403d50eMichael Jurka 44104c45677660586026a7e74ef8c47d396403d50eMichael Jurka len = Math.min(len, mBuf.remaining()); 45104c45677660586026a7e74ef8c47d396403d50eMichael Jurka mBuf.get(bytes, off, len); 46104c45677660586026a7e74ef8c47d396403d50eMichael Jurka return len; 47104c45677660586026a7e74ef8c47d396403d50eMichael Jurka } 48104c45677660586026a7e74ef8c47d396403d50eMichael Jurka} 49