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