FPXUtils.java
上传用户:btjssb159
上传日期:2018-01-04
资源大小:241k
文件大小:6k
源码类别:

DNA

开发平台:

Java

  1. /*
  2.  * Copyright (c) 2001 Sun Microsystems, Inc. All Rights Reserved.
  3.  *
  4.  * Redistribution and use in source and binary forms, with or without 
  5.  * modification, are permitted provided that the following conditions are met:
  6.  * 
  7.  * -Redistributions of source code must retain the above copyright notice, this 
  8.  * list of conditions and the following disclaimer.
  9.  *
  10.  * -Redistribution in binary form must reproduct the above copyright notice,
  11.  * this list of conditions and the following disclaimer in the documentation
  12.  * and/or other materials provided with the distribution.
  13.  * 
  14.  * Neither the name of Sun Microsystems, Inc. or the names of contributors may
  15.  * be used to endorse or promote products derived from this software without
  16.  * specific prior written permission.
  17.  * 
  18.  * This software is provided "AS IS," without a warranty of any kind. ALL
  19.  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
  20.  * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
  21.  * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
  22.  * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
  23.  * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
  24.  * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
  25.  * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
  26.  * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
  27.  * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
  28.  * POSSIBILITY OF SUCH DAMAGES.
  29.  * 
  30.  * You acknowledge that Software is not designed,licensed or intended for use in 
  31.  * the design, construction, operation or maintenance of any nuclear facility.
  32.  */
  33. import java.io.IOException;
  34. import java.text.DecimalFormat;
  35. public class FPXUtils {
  36. //     /** Reads a 2-byte little-endian value. */
  37. //     public static final int readInt2(SeekableStream file, int offset)
  38. //         throws IOException {
  39. //         file.seek(offset);
  40. //         return file.readShortLE();
  41. //     }
  42. //     /** Reads a 4-byte little-endian value. */
  43. //     public static final int readInt4(SeekableStream file, int offset) 
  44. //         throws IOException {
  45. //         file.seek(offset);
  46. //         return file.readIntLE();
  47. //     }
  48. //     /** Reads a 4-byte little-endian IEEE float. */
  49. //     public static final float readFloat(SeekableStream file, int offset) 
  50. //         throws IOException {
  51. //         file.seek(offset);
  52. //         return file.readFloatLE();
  53. //     }
  54. //     /** Reads an 8-byte little-endian IEEE double. */
  55. //     public static final double readDouble(SeekableStream file,
  56. //                                           int offset) 
  57. //         throws IOException {
  58. //         file.seek(offset);
  59. //         return file.readDoubleLE();
  60. //     }
  61.     public static final short getShortLE(byte[] data, int offset) {
  62.         int b0 = data[offset] & 0xff;
  63.         int b1 = data[offset + 1] & 0xff;
  64.         return (short)((b1 << 8) | b0);
  65.     }
  66.     public static final int getUnsignedShortLE(byte[] data, int offset) {
  67.         int b0 = data[offset] & 0xff;
  68.         int b1 = data[offset + 1] & 0xff;
  69.         return (b1 << 8) | b0;
  70.     }
  71.     public static final int getIntLE(byte[] data, int offset) {
  72.         int b0 = data[offset] & 0xff;
  73.         int b1 = data[offset + 1] & 0xff;
  74.         int b2 = data[offset + 2] & 0xff;
  75.         int b3 = data[offset + 3] & 0xff;
  76.         return (b3 << 24) | (b2 << 16) | (b1 << 8) | b0;
  77.     }
  78.     public static final long getUnsignedIntLE(byte[] data, int offset) {
  79.         long b0 = data[offset] & 0xff;
  80.         long b1 = data[offset + 1] & 0xff;
  81.         long b2 = data[offset + 2] & 0xff;
  82.         long b3 = data[offset + 3] & 0xff;
  83.         return (b3 << 24) | (b2 << 16) | (b1 << 8) | b0;
  84.     }
  85.     public static final String getString(byte[] data, int offset, int length) {
  86.         if (length == 0) {
  87.             return "<none>";
  88.         } else {
  89.             length = length/2 - 1; // workaround for Kodak bug
  90.         }
  91.         StringBuffer b = new StringBuffer(length);
  92.         for (int i = 0; i < length; i++) {
  93.             int c = getUnsignedShortLE(data, offset);
  94.             b.append((char)c);
  95.             offset += 2;
  96.         }
  97.         return b.toString();
  98.     }
  99.     private static void printDecimal(int i) {
  100.         DecimalFormat d = new DecimalFormat("00000");
  101.         System.out.print(d.format(i));
  102.     }
  103.     private static void printHex(byte b) {
  104.         int i = b & 0xff;
  105.         int hi = i/16;
  106.         int lo = i % 16;
  107.         if (hi < 10) {
  108.             System.out.print((char)('0' + hi));
  109.         } else {
  110.             System.out.print((char)('a' + hi - 10));
  111.         }
  112.         if (lo < 10) {
  113.             System.out.print((char)('0' + lo));
  114.         } else {
  115.             System.out.print((char)('a' + lo - 10));
  116.         }
  117.     }
  118.     private static void printChar(byte b) {
  119.         char c = (char)(b & 0xff);
  120.         if (c >= '!' && c <= '~') {
  121.             System.out.print(' ');
  122.             System.out.print(c);
  123.         } else if (c == 0) {
  124.             System.out.print("^@");
  125.         } else if (c < ' ') {
  126.             System.out.print('^');
  127.             System.out.print((char)('A' + c - 1));
  128.         } else if (c == ' ') {
  129.             System.out.print("__");
  130.         } else {
  131.             System.out.print("??");
  132.         }
  133.     }
  134.     public static void dumpBuffer(byte[] buf, int offset, int length,
  135.                                   int printOffset) {
  136.         int lines = length/8;
  137.         for (int j = 0; j < lines; j++) {
  138.             printDecimal(printOffset);
  139.             System.out.print(": ");
  140.             
  141.             for (int i = 0; i < 8; i++) {
  142.                 printHex(buf[offset + i]);
  143.                 System.out.print("  ");
  144.             }
  145.             for (int i = 0; i < 8; i++) {
  146.                 printChar(buf[offset + i]);
  147.                 System.out.print("  ");
  148.             }
  149.             offset += 8;
  150.             printOffset += 8;
  151.             System.out.println();
  152.         }
  153.     }
  154. }