1d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/* 2d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2012 The Android Open Source Project 3d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 4d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Licensed under the Apache License, Version 2.0 (the "License"); 5d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * you may not use this file except in compliance with the License. 6d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * You may obtain a copy of the License at 7d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 8d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * http://www.apache.org/licenses/LICENSE-2.0 9d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 10d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Unless required by applicable law or agreed to in writing, software 11d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * distributed under the License is distributed on an "AS IS" BASIS, 12d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * See the License for the specific language governing permissions and 14d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * limitations under the License. 15d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 16d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 17d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpackage com.android.messaging.util.exif; 18d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 19d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.io.FilterOutputStream; 20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.io.IOException; 21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.io.OutputStream; 22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.nio.ByteBuffer; 23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.nio.ByteOrder; 24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddclass OrderedDataOutputStream extends FilterOutputStream { 26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final ByteBuffer mByteBuffer = ByteBuffer.allocate(4); 27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public OrderedDataOutputStream(OutputStream out) { 29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd super(out); 30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public OrderedDataOutputStream setByteOrder(ByteOrder order) { 33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mByteBuffer.order(order); 34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return this; 35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public OrderedDataOutputStream writeShort(short value) throws IOException { 38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mByteBuffer.rewind(); 39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mByteBuffer.putShort(value); 40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd out.write(mByteBuffer.array(), 0, 2); 41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return this; 42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public OrderedDataOutputStream writeInt(int value) throws IOException { 45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mByteBuffer.rewind(); 46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mByteBuffer.putInt(value); 47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd out.write(mByteBuffer.array()); 48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return this; 49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public OrderedDataOutputStream writeRational(Rational rational) throws IOException { 52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd writeInt((int) rational.getNumerator()); 53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd writeInt((int) rational.getDenominator()); 54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return this; 55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd} 57