196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/* 296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * this work for additional information regarding copyright ownership. 596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * (the "License"); you may not use this file except in compliance with 796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * the License. You may obtain a copy of the License at 896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 1096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 1196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * See the License for the specific language governing permissions and 1596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * limitations under the License. 1696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 1796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpackage org.apache.commons.io; 1896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 1996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.EOFException; 2096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.IOException; 2196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.InputStream; 2296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.OutputStream; 2396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 2496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/** 2596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Utility code for dealing with different endian systems. 2696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p> 2796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Different computer architectures adopt different conventions for 2896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * byte ordering. In so-called "Little Endian" architectures (eg Intel), 2996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * the low-order byte is stored in memory at the lowest address, and 3096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * subsequent bytes at higher addresses. For "Big Endian" architectures 3196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * (eg Motorola), the situation is reversed. 3296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * This class helps you solve this incompatability. 3396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p> 3496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Origin of code: Excalibur 3596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author <a href="mailto:peter@apache.org">Peter Donald</a> 3796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @version $Id: EndianUtils.java 539632 2007-05-18 23:37:59Z bayard $ 3896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see org.apache.commons.io.input.SwappedDataInputStream 3996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 4096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpublic class EndianUtils { 4196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 4296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 4396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Instances should NOT be constructed in standard programming. 4496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 4596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public EndianUtils() { 4696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project super(); 4796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 4896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 4996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ========================================== Swapping routines 5096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 5196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 5296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Converts a "short" value between endian systems. 5396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param value value to convert 5496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the converted value 5596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 5696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static short swapShort(short value) { 5796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return (short) ( ( ( ( value >> 0 ) & 0xff ) << 8 ) + 5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( ( value >> 8 ) & 0xff ) << 0 ) ); 5996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Converts a "int" value between endian systems. 6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param value value to convert 6496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the converted value 6596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static int swapInteger(int value) { 6796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return 6896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( ( value >> 0 ) & 0xff ) << 24 ) + 6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( ( value >> 8 ) & 0xff ) << 16 ) + 7096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( ( value >> 16 ) & 0xff ) << 8 ) + 7196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( ( value >> 24 ) & 0xff ) << 0 ); 7296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 7396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 7496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 7596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Converts a "long" value between endian systems. 7696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param value value to convert 7796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the converted value 7896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 7996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static long swapLong(long value) { 8096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return 8196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( ( value >> 0 ) & 0xff ) << 56 ) + 8296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( ( value >> 8 ) & 0xff ) << 48 ) + 8396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( ( value >> 16 ) & 0xff ) << 40 ) + 8496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( ( value >> 24 ) & 0xff ) << 32 ) + 8596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( ( value >> 32 ) & 0xff ) << 24 ) + 8696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( ( value >> 40 ) & 0xff ) << 16 ) + 8796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( ( value >> 48 ) & 0xff ) << 8 ) + 8896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( ( value >> 56 ) & 0xff ) << 0 ); 8996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 9096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 9196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 9296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Converts a "float" value between endian systems. 9396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param value value to convert 9496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the converted value 9596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 9696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static float swapFloat(float value) { 9796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return Float.intBitsToFloat( swapInteger( Float.floatToIntBits( value ) ) ); 9896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 9996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 10096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 10196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Converts a "double" value between endian systems. 10296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param value value to convert 10396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the converted value 10496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 10596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static double swapDouble(double value) { 10696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return Double.longBitsToDouble( swapLong( Double.doubleToLongBits( value ) ) ); 10796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 10896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 10996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // ========================================== Swapping read/write routines 11096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 11196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 11296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Writes a "short" value to a byte array at a given offset. The value is 11396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while writing. 11496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param data target byte array 11596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param offset starting offset in the byte array 11696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param value value to write 11796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 11896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static void writeSwappedShort(byte[] data, int offset, short value) { 11996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project data[ offset + 0 ] = (byte)( ( value >> 0 ) & 0xff ); 12096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project data[ offset + 1 ] = (byte)( ( value >> 8 ) & 0xff ); 12196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 12296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 12396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 12496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Reads a "short" value from a byte array at a given offset. The value is 12596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while reading. 12696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param data source byte array 12796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param offset starting offset in the byte array 12896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the value read 12996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 13096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static short readSwappedShort(byte[] data, int offset) { 13196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return (short)( ( ( data[ offset + 0 ] & 0xff ) << 0 ) + 13296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( data[ offset + 1 ] & 0xff ) << 8 ) ); 13396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 13496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 13596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 13696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Reads an unsigned short (16-bit) value from a byte array at a given 13796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * offset. The value is converted to the opposed endian system while 13896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * reading. 13996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param data source byte array 14096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param offset starting offset in the byte array 14196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the value read 14296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 14396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static int readSwappedUnsignedShort(byte[] data, int offset) { 14496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return ( ( ( data[ offset + 0 ] & 0xff ) << 0 ) + 14596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( data[ offset + 1 ] & 0xff ) << 8 ) ); 14696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 14796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 14896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 14996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Writes a "int" value to a byte array at a given offset. The value is 15096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while writing. 15196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param data target byte array 15296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param offset starting offset in the byte array 15396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param value value to write 15496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 15596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static void writeSwappedInteger(byte[] data, int offset, int value) { 15696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project data[ offset + 0 ] = (byte)( ( value >> 0 ) & 0xff ); 15796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project data[ offset + 1 ] = (byte)( ( value >> 8 ) & 0xff ); 15896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project data[ offset + 2 ] = (byte)( ( value >> 16 ) & 0xff ); 15996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project data[ offset + 3 ] = (byte)( ( value >> 24 ) & 0xff ); 16096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 16196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 16296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 16396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Reads a "int" value from a byte array at a given offset. The value is 16496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while reading. 16596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param data source byte array 16696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param offset starting offset in the byte array 16796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the value read 16896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 16996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static int readSwappedInteger(byte[] data, int offset) { 17096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return ( ( ( data[ offset + 0 ] & 0xff ) << 0 ) + 17196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( data[ offset + 1 ] & 0xff ) << 8 ) + 17296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( data[ offset + 2 ] & 0xff ) << 16 ) + 17396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( data[ offset + 3 ] & 0xff ) << 24 ) ); 17496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 17596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 17696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 17796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Reads an unsigned integer (32-bit) value from a byte array at a given 17896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * offset. The value is converted to the opposed endian system while 17996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * reading. 18096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param data source byte array 18196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param offset starting offset in the byte array 18296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the value read 18396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 18496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static long readSwappedUnsignedInteger(byte[] data, int offset) { 18596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project long low = ( ( ( data[ offset + 0 ] & 0xff ) << 0 ) + 18696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( data[ offset + 1 ] & 0xff ) << 8 ) + 18796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( data[ offset + 2 ] & 0xff ) << 16 ) ); 18896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 18996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project long high = data[ offset + 3 ] & 0xff; 19096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 19196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return (high << 24) + (0xffffffffL & low); 19296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 19396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 19496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 19596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Writes a "long" value to a byte array at a given offset. The value is 19696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while writing. 19796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param data target byte array 19896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param offset starting offset in the byte array 19996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param value value to write 20096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 20196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static void writeSwappedLong(byte[] data, int offset, long value) { 20296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project data[ offset + 0 ] = (byte)( ( value >> 0 ) & 0xff ); 20396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project data[ offset + 1 ] = (byte)( ( value >> 8 ) & 0xff ); 20496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project data[ offset + 2 ] = (byte)( ( value >> 16 ) & 0xff ); 20596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project data[ offset + 3 ] = (byte)( ( value >> 24 ) & 0xff ); 20696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project data[ offset + 4 ] = (byte)( ( value >> 32 ) & 0xff ); 20796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project data[ offset + 5 ] = (byte)( ( value >> 40 ) & 0xff ); 20896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project data[ offset + 6 ] = (byte)( ( value >> 48 ) & 0xff ); 20996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project data[ offset + 7 ] = (byte)( ( value >> 56 ) & 0xff ); 21096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 21196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 21296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 21396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Reads a "long" value from a byte array at a given offset. The value is 21496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while reading. 21596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param data source byte array 21696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param offset starting offset in the byte array 21796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the value read 21896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 21996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static long readSwappedLong(byte[] data, int offset) { 22096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project long low = 22196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( data[ offset + 0 ] & 0xff ) << 0 ) + 22296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( data[ offset + 1 ] & 0xff ) << 8 ) + 22396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( data[ offset + 2 ] & 0xff ) << 16 ) + 22496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( data[ offset + 3 ] & 0xff ) << 24 ); 22596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project long high = 22696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( data[ offset + 4 ] & 0xff ) << 0 ) + 22796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( data[ offset + 5 ] & 0xff ) << 8 ) + 22896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( data[ offset + 6 ] & 0xff ) << 16 ) + 22996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( data[ offset + 7 ] & 0xff ) << 24 ); 23096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return (high << 32) + (0xffffffffL & low); 23196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 23296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 23396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 23496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Writes a "float" value to a byte array at a given offset. The value is 23596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while writing. 23696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param data target byte array 23796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param offset starting offset in the byte array 23896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param value value to write 23996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 24096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static void writeSwappedFloat(byte[] data, int offset, float value) { 24196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project writeSwappedInteger( data, offset, Float.floatToIntBits( value ) ); 24296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 24396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 24496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 24596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Reads a "float" value from a byte array at a given offset. The value is 24696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while reading. 24796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param data source byte array 24896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param offset starting offset in the byte array 24996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the value read 25096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 25196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static float readSwappedFloat(byte[] data, int offset) { 25296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return Float.intBitsToFloat( readSwappedInteger( data, offset ) ); 25396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 25496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 25596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 25696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Writes a "double" value to a byte array at a given offset. The value is 25796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while writing. 25896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param data target byte array 25996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param offset starting offset in the byte array 26096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param value value to write 26196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 26296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static void writeSwappedDouble(byte[] data, int offset, double value) { 26396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project writeSwappedLong( data, offset, Double.doubleToLongBits( value ) ); 26496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 26596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 26696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 26796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Reads a "double" value from a byte array at a given offset. The value is 26896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while reading. 26996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param data source byte array 27096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param offset starting offset in the byte array 27196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the value read 27296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 27396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static double readSwappedDouble(byte[] data, int offset) { 27496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return Double.longBitsToDouble( readSwappedLong( data, offset ) ); 27596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 27696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 27796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 27896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Writes a "short" value to an OutputStream. The value is 27996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while writing. 28096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param output target OutputStream 28196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param value value to write 28296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException in case of an I/O problem 28396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 28496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static void writeSwappedShort(OutputStream output, short value) 28596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException 28696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 28796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project output.write( (byte)( ( value >> 0 ) & 0xff ) ); 28896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project output.write( (byte)( ( value >> 8 ) & 0xff ) ); 28996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 29096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 29196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 29296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Reads a "short" value from an InputStream. The value is 29396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while reading. 29496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param input source InputStream 29596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the value just read 29696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException in case of an I/O problem 29796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 29896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static short readSwappedShort(InputStream input) 29996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException 30096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 30196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return (short)( ( ( read( input ) & 0xff ) << 0 ) + 30296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( read( input ) & 0xff ) << 8 ) ); 30396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 30496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 30596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 30696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Reads a unsigned short (16-bit) from an InputStream. The value is 30796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while reading. 30896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param input source InputStream 30996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the value just read 31096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException in case of an I/O problem 31196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 31296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static int readSwappedUnsignedShort(InputStream input) 31396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException 31496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 31596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project int value1 = read( input ); 31696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project int value2 = read( input ); 31796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 31896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return ( ( ( value1 & 0xff ) << 0 ) + 31996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( value2 & 0xff ) << 8 ) ); 32096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 32196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 32296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 32396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Writes a "int" value to an OutputStream. The value is 32496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while writing. 32596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param output target OutputStream 32696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param value value to write 32796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException in case of an I/O problem 32896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 32996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static void writeSwappedInteger(OutputStream output, int value) 33096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException 33196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 33296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project output.write( (byte)( ( value >> 0 ) & 0xff ) ); 33396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project output.write( (byte)( ( value >> 8 ) & 0xff ) ); 33496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project output.write( (byte)( ( value >> 16 ) & 0xff ) ); 33596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project output.write( (byte)( ( value >> 24 ) & 0xff ) ); 33696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 33796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 33896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 33996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Reads a "int" value from an InputStream. The value is 34096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while reading. 34196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param input source InputStream 34296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the value just read 34396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException in case of an I/O problem 34496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 34596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static int readSwappedInteger(InputStream input) 34696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException 34796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 34896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project int value1 = read( input ); 34996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project int value2 = read( input ); 35096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project int value3 = read( input ); 35196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project int value4 = read( input ); 35296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 35396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return ( ( value1 & 0xff ) << 0 ) + 35496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( value2 & 0xff ) << 8 ) + 35596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( value3 & 0xff ) << 16 ) + 35696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( value4 & 0xff ) << 24 ); 35796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 35896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 35996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 36096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Reads a unsigned integer (32-bit) from an InputStream. The value is 36196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while reading. 36296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param input source InputStream 36396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the value just read 36496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException in case of an I/O problem 36596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 36696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static long readSwappedUnsignedInteger(InputStream input) 36796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException 36896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 36996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project int value1 = read( input ); 37096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project int value2 = read( input ); 37196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project int value3 = read( input ); 37296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project int value4 = read( input ); 37396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 37496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project long low = ( ( ( value1 & 0xff ) << 0 ) + 37596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( value2 & 0xff ) << 8 ) + 37696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ( ( value3 & 0xff ) << 16 ) ); 37796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 37896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project long high = value4 & 0xff; 37996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 38096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return (high << 24) + (0xffffffffL & low); 38196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 38296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 38396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 38496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Writes a "long" value to an OutputStream. The value is 38596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while writing. 38696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param output target OutputStream 38796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param value value to write 38896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException in case of an I/O problem 38996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 39096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static void writeSwappedLong(OutputStream output, long value) 39196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException 39296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 39396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project output.write( (byte)( ( value >> 0 ) & 0xff ) ); 39496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project output.write( (byte)( ( value >> 8 ) & 0xff ) ); 39596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project output.write( (byte)( ( value >> 16 ) & 0xff ) ); 39696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project output.write( (byte)( ( value >> 24 ) & 0xff ) ); 39796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project output.write( (byte)( ( value >> 32 ) & 0xff ) ); 39896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project output.write( (byte)( ( value >> 40 ) & 0xff ) ); 39996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project output.write( (byte)( ( value >> 48 ) & 0xff ) ); 40096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project output.write( (byte)( ( value >> 56 ) & 0xff ) ); 40196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 40296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 40396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 40496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Reads a "long" value from an InputStream. The value is 40596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while reading. 40696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param input source InputStream 40796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the value just read 40896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException in case of an I/O problem 40996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 41096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static long readSwappedLong(InputStream input) 41196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException 41296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 41396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project byte[] bytes = new byte[8]; 41496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project for ( int i=0; i<8; i++ ) { 41596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project bytes[i] = (byte) read( input ); 41696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 41796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return readSwappedLong( bytes, 0 ); 41896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 41996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 42096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 42196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Writes a "float" value to an OutputStream. The value is 42296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while writing. 42396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param output target OutputStream 42496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param value value to write 42596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException in case of an I/O problem 42696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 42796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static void writeSwappedFloat(OutputStream output, float value) 42896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException 42996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 43096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project writeSwappedInteger( output, Float.floatToIntBits( value ) ); 43196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 43296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 43396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 43496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Reads a "float" value from an InputStream. The value is 43596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while reading. 43696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param input source InputStream 43796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the value just read 43896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException in case of an I/O problem 43996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 44096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static float readSwappedFloat(InputStream input) 44196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException 44296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 44396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return Float.intBitsToFloat( readSwappedInteger( input ) ); 44496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 44596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 44696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 44796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Writes a "double" value to an OutputStream. The value is 44896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while writing. 44996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param output target OutputStream 45096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param value value to write 45196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException in case of an I/O problem 45296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 45396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static void writeSwappedDouble(OutputStream output, double value) 45496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException 45596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 45696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project writeSwappedLong( output, Double.doubleToLongBits( value ) ); 45796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 45896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 45996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 46096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Reads a "double" value from an InputStream. The value is 46196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * converted to the opposed endian system while reading. 46296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param input source InputStream 46396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the value just read 46496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException in case of an I/O problem 46596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 46696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public static double readSwappedDouble(InputStream input) 46796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException 46896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 46996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return Double.longBitsToDouble( readSwappedLong( input ) ); 47096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 47196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 47296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 47396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Reads the next byte from the input stream. 47496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param input the stream 47596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the byte 47696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException if the end of file is reached 47796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 47896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private static int read(InputStream input) 47996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException 48096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project { 48196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project int value = input.read(); 48296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 48396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project if( -1 == value ) { 48496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throw new EOFException( "Unexpected EOF reached" ); 48596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 48696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 48796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return value; 48896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 48996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project} 490