14f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou/*
24f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou * Copyright (C) 2012 The Android Open Source Project
34f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou *
44f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou * Licensed under the Apache License, Version 2.0 (the "License");
54f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou * you may not use this file except in compliance with the License.
64f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou * You may obtain a copy of the License at
74f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou *
84f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou *      http://www.apache.org/licenses/LICENSE-2.0
94f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou *
104f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou * Unless required by applicable law or agreed to in writing, software
114f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou * distributed under the License is distributed on an "AS IS" BASIS,
124f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou * See the License for the specific language governing permissions and
144f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou * limitations under the License.
154f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou */
164f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou
174f529e7cada294befb66a1fc9b72b1aa164597dfEarl Oupackage com.android.gallery3d.exif;
184f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou
194f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ouimport java.io.FilterOutputStream;
204f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ouimport java.io.IOException;
214f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ouimport java.io.OutputStream;
224f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ouimport java.nio.ByteBuffer;
234f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ouimport java.nio.ByteOrder;
244f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou
25e48c0f96ee3f9654c3538664dd59485927fb44d6Earl Ouclass OrderedDataOutputStream extends FilterOutputStream {
264f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou    private final ByteBuffer mByteBuffer = ByteBuffer.allocate(4);
274f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou
284f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou    public OrderedDataOutputStream(OutputStream out) {
294f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou        super(out);
304f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou    }
314f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou
326e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk    public OrderedDataOutputStream setByteOrder(ByteOrder order) {
334f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou        mByteBuffer.order(order);
346e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk        return this;
354f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou    }
364f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou
376e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk    public OrderedDataOutputStream writeShort(short value) throws IOException {
384f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou        mByteBuffer.rewind();
394f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou        mByteBuffer.putShort(value);
404f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou        out.write(mByteBuffer.array(), 0, 2);
416e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk        return this;
426e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk    }
434f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou
446e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk    public OrderedDataOutputStream writeInt(int value) throws IOException {
454f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou        mByteBuffer.rewind();
464f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou        mByteBuffer.putInt(value);
474f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou        out.write(mByteBuffer.array());
486e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk        return this;
494f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou    }
504f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou
516e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk    public OrderedDataOutputStream writeRational(Rational rational) throws IOException {
526e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk        writeInt((int) rational.getNumerator());
534f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou        writeInt((int) rational.getDenominator());
546e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk        return this;
554f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou    }
564f529e7cada294befb66a1fc9b72b1aa164597dfEarl Ou}
57