14fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/* 24fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Licensed to the Apache Software Foundation (ASF) under one or more 34fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * contributor license agreements. See the NOTICE file distributed with 44fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * this work for additional information regarding copyright ownership. 54fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * The ASF licenses this file to You under the Apache License, Version 2.0 64fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * (the "License"); you may not use this file except in compliance with 74fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * the License. You may obtain a copy of the License at 84fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * 94fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * http://www.apache.org/licenses/LICENSE-2.0 104fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * 114fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Unless required by applicable law or agreed to in writing, software 124fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * distributed under the License is distributed on an "AS IS" BASIS, 134fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 144fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * See the License for the specific language governing permissions and 154fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * limitations under the License. 164fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 174fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedypackage org.apache.commons.io; 184fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 194fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyimport java.io.EOFException; 204fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyimport java.io.IOException; 214fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyimport java.io.InputStream; 224fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyimport java.io.OutputStream; 234fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 244fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/** 254fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Utility code for dealing with different endian systems. 264fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * <p> 274fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Different computer architectures adopt different conventions for 284fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * byte ordering. In so-called "Little Endian" architectures (eg Intel), 294fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * the low-order byte is stored in memory at the lowest address, and 304fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * subsequent bytes at higher addresses. For "Big Endian" architectures 314fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * (eg Motorola), the situation is reversed. 324fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * This class helps you solve this incompatability. 334fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * <p> 344fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Origin of code: Excalibur 354fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * 364fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @author <a href="mailto:peter@apache.org">Peter Donald</a> 374fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @version $Id: EndianUtils.java 539632 2007-05-18 23:37:59Z bayard $ 384fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @see org.apache.commons.io.input.SwappedDataInputStream 394fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 404fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedypublic class EndianUtils { 414fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 424fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 434fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Instances should NOT be constructed in standard programming. 444fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 454fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public EndianUtils() { 464fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy super(); 474fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 484fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 494fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy // ========================================== Swapping routines 504fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 514fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 524fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Converts a "short" value between endian systems. 534fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param value value to convert 544fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the converted value 554fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 564fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static short swapShort(short value) { 574fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return (short) ( ( ( ( value >> 0 ) & 0xff ) << 8 ) + 584fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( ( value >> 8 ) & 0xff ) << 0 ) ); 594fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 604fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 614fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 624fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Converts a "int" value between endian systems. 634fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param value value to convert 644fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the converted value 654fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 664fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static int swapInteger(int value) { 674fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return 684fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( ( value >> 0 ) & 0xff ) << 24 ) + 694fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( ( value >> 8 ) & 0xff ) << 16 ) + 704fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( ( value >> 16 ) & 0xff ) << 8 ) + 714fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( ( value >> 24 ) & 0xff ) << 0 ); 724fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 734fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 744fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 754fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Converts a "long" value between endian systems. 764fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param value value to convert 774fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the converted value 784fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 794fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static long swapLong(long value) { 804fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return 814fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( ( value >> 0 ) & 0xff ) << 56 ) + 824fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( ( value >> 8 ) & 0xff ) << 48 ) + 834fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( ( value >> 16 ) & 0xff ) << 40 ) + 844fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( ( value >> 24 ) & 0xff ) << 32 ) + 854fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( ( value >> 32 ) & 0xff ) << 24 ) + 864fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( ( value >> 40 ) & 0xff ) << 16 ) + 874fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( ( value >> 48 ) & 0xff ) << 8 ) + 884fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( ( value >> 56 ) & 0xff ) << 0 ); 894fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 904fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 914fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 924fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Converts a "float" value between endian systems. 934fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param value value to convert 944fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the converted value 954fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 964fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static float swapFloat(float value) { 974fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return Float.intBitsToFloat( swapInteger( Float.floatToIntBits( value ) ) ); 984fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 994fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 1004fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 1014fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Converts a "double" value between endian systems. 1024fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param value value to convert 1034fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the converted value 1044fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 1054fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static double swapDouble(double value) { 1064fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return Double.longBitsToDouble( swapLong( Double.doubleToLongBits( value ) ) ); 1074fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 1084fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 1094fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy // ========================================== Swapping read/write routines 1104fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 1114fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 1124fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Writes a "short" value to a byte array at a given offset. The value is 1134fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while writing. 1144fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param data target byte array 1154fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param offset starting offset in the byte array 1164fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param value value to write 1174fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 1184fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static void writeSwappedShort(byte[] data, int offset, short value) { 1194fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy data[ offset + 0 ] = (byte)( ( value >> 0 ) & 0xff ); 1204fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy data[ offset + 1 ] = (byte)( ( value >> 8 ) & 0xff ); 1214fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 1224fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 1234fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 1244fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Reads a "short" value from a byte array at a given offset. The value is 1254fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while reading. 1264fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param data source byte array 1274fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param offset starting offset in the byte array 1284fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the value read 1294fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 1304fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static short readSwappedShort(byte[] data, int offset) { 1314fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return (short)( ( ( data[ offset + 0 ] & 0xff ) << 0 ) + 1324fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( data[ offset + 1 ] & 0xff ) << 8 ) ); 1334fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 1344fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 1354fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 1364fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Reads an unsigned short (16-bit) value from a byte array at a given 1374fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * offset. The value is converted to the opposed endian system while 1384fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * reading. 1394fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param data source byte array 1404fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param offset starting offset in the byte array 1414fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the value read 1424fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 1434fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static int readSwappedUnsignedShort(byte[] data, int offset) { 1444fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return ( ( ( data[ offset + 0 ] & 0xff ) << 0 ) + 1454fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( data[ offset + 1 ] & 0xff ) << 8 ) ); 1464fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 1474fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 1484fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 1494fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Writes a "int" value to a byte array at a given offset. The value is 1504fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while writing. 1514fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param data target byte array 1524fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param offset starting offset in the byte array 1534fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param value value to write 1544fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 1554fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static void writeSwappedInteger(byte[] data, int offset, int value) { 1564fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy data[ offset + 0 ] = (byte)( ( value >> 0 ) & 0xff ); 1574fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy data[ offset + 1 ] = (byte)( ( value >> 8 ) & 0xff ); 1584fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy data[ offset + 2 ] = (byte)( ( value >> 16 ) & 0xff ); 1594fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy data[ offset + 3 ] = (byte)( ( value >> 24 ) & 0xff ); 1604fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 1614fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 1624fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 1634fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Reads a "int" value from a byte array at a given offset. The value is 1644fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while reading. 1654fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param data source byte array 1664fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param offset starting offset in the byte array 1674fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the value read 1684fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 1694fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static int readSwappedInteger(byte[] data, int offset) { 1704fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return ( ( ( data[ offset + 0 ] & 0xff ) << 0 ) + 1714fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( data[ offset + 1 ] & 0xff ) << 8 ) + 1724fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( data[ offset + 2 ] & 0xff ) << 16 ) + 1734fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( data[ offset + 3 ] & 0xff ) << 24 ) ); 1744fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 1754fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 1764fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 1774fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Reads an unsigned integer (32-bit) value from a byte array at a given 1784fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * offset. The value is converted to the opposed endian system while 1794fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * reading. 1804fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param data source byte array 1814fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param offset starting offset in the byte array 1824fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the value read 1834fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 1844fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static long readSwappedUnsignedInteger(byte[] data, int offset) { 1854fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy long low = ( ( ( data[ offset + 0 ] & 0xff ) << 0 ) + 1864fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( data[ offset + 1 ] & 0xff ) << 8 ) + 1874fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( data[ offset + 2 ] & 0xff ) << 16 ) ); 1884fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 1894fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy long high = data[ offset + 3 ] & 0xff; 1904fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 1914fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return (high << 24) + (0xffffffffL & low); 1924fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 1934fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 1944fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 1954fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Writes a "long" value to a byte array at a given offset. The value is 1964fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while writing. 1974fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param data target byte array 1984fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param offset starting offset in the byte array 1994fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param value value to write 2004fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 2014fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static void writeSwappedLong(byte[] data, int offset, long value) { 2024fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy data[ offset + 0 ] = (byte)( ( value >> 0 ) & 0xff ); 2034fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy data[ offset + 1 ] = (byte)( ( value >> 8 ) & 0xff ); 2044fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy data[ offset + 2 ] = (byte)( ( value >> 16 ) & 0xff ); 2054fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy data[ offset + 3 ] = (byte)( ( value >> 24 ) & 0xff ); 2064fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy data[ offset + 4 ] = (byte)( ( value >> 32 ) & 0xff ); 2074fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy data[ offset + 5 ] = (byte)( ( value >> 40 ) & 0xff ); 2084fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy data[ offset + 6 ] = (byte)( ( value >> 48 ) & 0xff ); 2094fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy data[ offset + 7 ] = (byte)( ( value >> 56 ) & 0xff ); 2104fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 2114fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 2124fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 2134fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Reads a "long" value from a byte array at a given offset. The value is 2144fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while reading. 2154fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param data source byte array 2164fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param offset starting offset in the byte array 2174fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the value read 2184fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 2194fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static long readSwappedLong(byte[] data, int offset) { 2204fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy long low = 2214fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( data[ offset + 0 ] & 0xff ) << 0 ) + 2224fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( data[ offset + 1 ] & 0xff ) << 8 ) + 2234fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( data[ offset + 2 ] & 0xff ) << 16 ) + 2244fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( data[ offset + 3 ] & 0xff ) << 24 ); 2254fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy long high = 2264fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( data[ offset + 4 ] & 0xff ) << 0 ) + 2274fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( data[ offset + 5 ] & 0xff ) << 8 ) + 2284fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( data[ offset + 6 ] & 0xff ) << 16 ) + 2294fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( data[ offset + 7 ] & 0xff ) << 24 ); 2304fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return (high << 32) + (0xffffffffL & low); 2314fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 2324fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 2334fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 2344fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Writes a "float" value to a byte array at a given offset. The value is 2354fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while writing. 2364fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param data target byte array 2374fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param offset starting offset in the byte array 2384fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param value value to write 2394fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 2404fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static void writeSwappedFloat(byte[] data, int offset, float value) { 2414fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy writeSwappedInteger( data, offset, Float.floatToIntBits( value ) ); 2424fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 2434fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 2444fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 2454fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Reads a "float" value from a byte array at a given offset. The value is 2464fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while reading. 2474fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param data source byte array 2484fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param offset starting offset in the byte array 2494fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the value read 2504fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 2514fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static float readSwappedFloat(byte[] data, int offset) { 2524fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return Float.intBitsToFloat( readSwappedInteger( data, offset ) ); 2534fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 2544fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 2554fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 2564fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Writes a "double" value to a byte array at a given offset. The value is 2574fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while writing. 2584fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param data target byte array 2594fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param offset starting offset in the byte array 2604fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param value value to write 2614fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 2624fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static void writeSwappedDouble(byte[] data, int offset, double value) { 2634fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy writeSwappedLong( data, offset, Double.doubleToLongBits( value ) ); 2644fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 2654fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 2664fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 2674fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Reads a "double" value from a byte array at a given offset. The value is 2684fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while reading. 2694fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param data source byte array 2704fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param offset starting offset in the byte array 2714fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the value read 2724fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 2734fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static double readSwappedDouble(byte[] data, int offset) { 2744fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return Double.longBitsToDouble( readSwappedLong( data, offset ) ); 2754fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 2764fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 2774fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 2784fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Writes a "short" value to an OutputStream. The value is 2794fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while writing. 2804fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param output target OutputStream 2814fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param value value to write 2824fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @throws IOException in case of an I/O problem 2834fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 2844fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static void writeSwappedShort(OutputStream output, short value) 2854fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy throws IOException 2864fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy { 2874fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy output.write( (byte)( ( value >> 0 ) & 0xff ) ); 2884fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy output.write( (byte)( ( value >> 8 ) & 0xff ) ); 2894fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 2904fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 2914fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 2924fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Reads a "short" value from an InputStream. The value is 2934fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while reading. 2944fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param input source InputStream 2954fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the value just read 2964fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @throws IOException in case of an I/O problem 2974fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 2984fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static short readSwappedShort(InputStream input) 2994fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy throws IOException 3004fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy { 3014fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return (short)( ( ( read( input ) & 0xff ) << 0 ) + 3024fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( read( input ) & 0xff ) << 8 ) ); 3034fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 3044fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 3054fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 3064fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Reads a unsigned short (16-bit) from an InputStream. The value is 3074fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while reading. 3084fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param input source InputStream 3094fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the value just read 3104fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @throws IOException in case of an I/O problem 3114fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 3124fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static int readSwappedUnsignedShort(InputStream input) 3134fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy throws IOException 3144fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy { 3154fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy int value1 = read( input ); 3164fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy int value2 = read( input ); 3174fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 3184fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return ( ( ( value1 & 0xff ) << 0 ) + 3194fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( value2 & 0xff ) << 8 ) ); 3204fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 3214fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 3224fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 3234fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Writes a "int" value to an OutputStream. The value is 3244fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while writing. 3254fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param output target OutputStream 3264fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param value value to write 3274fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @throws IOException in case of an I/O problem 3284fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 3294fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static void writeSwappedInteger(OutputStream output, int value) 3304fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy throws IOException 3314fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy { 3324fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy output.write( (byte)( ( value >> 0 ) & 0xff ) ); 3334fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy output.write( (byte)( ( value >> 8 ) & 0xff ) ); 3344fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy output.write( (byte)( ( value >> 16 ) & 0xff ) ); 3354fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy output.write( (byte)( ( value >> 24 ) & 0xff ) ); 3364fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 3374fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 3384fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 3394fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Reads a "int" value from an InputStream. The value is 3404fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while reading. 3414fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param input source InputStream 3424fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the value just read 3434fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @throws IOException in case of an I/O problem 3444fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 3454fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static int readSwappedInteger(InputStream input) 3464fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy throws IOException 3474fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy { 3484fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy int value1 = read( input ); 3494fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy int value2 = read( input ); 3504fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy int value3 = read( input ); 3514fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy int value4 = read( input ); 3524fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 3534fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return ( ( value1 & 0xff ) << 0 ) + 3544fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( value2 & 0xff ) << 8 ) + 3554fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( value3 & 0xff ) << 16 ) + 3564fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( value4 & 0xff ) << 24 ); 3574fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 3584fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 3594fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 3604fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Reads a unsigned integer (32-bit) from an InputStream. The value is 3614fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while reading. 3624fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param input source InputStream 3634fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the value just read 3644fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @throws IOException in case of an I/O problem 3654fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 3664fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static long readSwappedUnsignedInteger(InputStream input) 3674fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy throws IOException 3684fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy { 3694fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy int value1 = read( input ); 3704fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy int value2 = read( input ); 3714fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy int value3 = read( input ); 3724fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy int value4 = read( input ); 3734fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 3744fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy long low = ( ( ( value1 & 0xff ) << 0 ) + 3754fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( value2 & 0xff ) << 8 ) + 3764fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy ( ( value3 & 0xff ) << 16 ) ); 3774fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 3784fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy long high = value4 & 0xff; 3794fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 3804fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return (high << 24) + (0xffffffffL & low); 3814fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 3824fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 3834fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 3844fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Writes a "long" value to an OutputStream. The value is 3854fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while writing. 3864fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param output target OutputStream 3874fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param value value to write 3884fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @throws IOException in case of an I/O problem 3894fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 3904fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static void writeSwappedLong(OutputStream output, long value) 3914fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy throws IOException 3924fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy { 3934fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy output.write( (byte)( ( value >> 0 ) & 0xff ) ); 3944fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy output.write( (byte)( ( value >> 8 ) & 0xff ) ); 3954fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy output.write( (byte)( ( value >> 16 ) & 0xff ) ); 3964fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy output.write( (byte)( ( value >> 24 ) & 0xff ) ); 3974fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy output.write( (byte)( ( value >> 32 ) & 0xff ) ); 3984fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy output.write( (byte)( ( value >> 40 ) & 0xff ) ); 3994fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy output.write( (byte)( ( value >> 48 ) & 0xff ) ); 4004fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy output.write( (byte)( ( value >> 56 ) & 0xff ) ); 4014fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 4024fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 4034fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 4044fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Reads a "long" value from an InputStream. The value is 4054fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while reading. 4064fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param input source InputStream 4074fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the value just read 4084fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @throws IOException in case of an I/O problem 4094fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 4104fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static long readSwappedLong(InputStream input) 4114fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy throws IOException 4124fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy { 4134fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy byte[] bytes = new byte[8]; 4144fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy for ( int i=0; i<8; i++ ) { 4154fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy bytes[i] = (byte) read( input ); 4164fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 4174fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return readSwappedLong( bytes, 0 ); 4184fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 4194fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 4204fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 4214fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Writes a "float" value to an OutputStream. The value is 4224fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while writing. 4234fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param output target OutputStream 4244fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param value value to write 4254fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @throws IOException in case of an I/O problem 4264fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 4274fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static void writeSwappedFloat(OutputStream output, float value) 4284fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy throws IOException 4294fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy { 4304fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy writeSwappedInteger( output, Float.floatToIntBits( value ) ); 4314fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 4324fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 4334fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 4344fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Reads a "float" value from an InputStream. The value is 4354fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while reading. 4364fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param input source InputStream 4374fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the value just read 4384fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @throws IOException in case of an I/O problem 4394fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 4404fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static float readSwappedFloat(InputStream input) 4414fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy throws IOException 4424fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy { 4434fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return Float.intBitsToFloat( readSwappedInteger( input ) ); 4444fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 4454fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 4464fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 4474fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Writes a "double" value to an OutputStream. The value is 4484fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while writing. 4494fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param output target OutputStream 4504fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param value value to write 4514fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @throws IOException in case of an I/O problem 4524fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 4534fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static void writeSwappedDouble(OutputStream output, double value) 4544fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy throws IOException 4554fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy { 4564fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy writeSwappedLong( output, Double.doubleToLongBits( value ) ); 4574fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 4584fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 4594fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 4604fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Reads a "double" value from an InputStream. The value is 4614fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * converted to the opposed endian system while reading. 4624fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param input source InputStream 4634fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the value just read 4644fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @throws IOException in case of an I/O problem 4654fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 4664fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static double readSwappedDouble(InputStream input) 4674fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy throws IOException 4684fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy { 4694fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return Double.longBitsToDouble( readSwappedLong( input ) ); 4704fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 4714fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 4724fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 4734fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Reads the next byte from the input stream. 4744fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param input the stream 4754fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return the byte 4764fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @throws IOException if the end of file is reached 4774fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 4784fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy private static int read(InputStream input) 4794fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy throws IOException 4804fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy { 4814fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy int value = input.read(); 4824fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 4834fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy if( -1 == value ) { 4844fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy throw new EOFException( "Unexpected EOF reached" ); 4854fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 4864fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 4874fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return value; 4884fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 4894fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy} 490