KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > tools > zip > ZipLong


1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */

18
19 package org.apache.tools.zip;
20
21 /**
22  * Utility class that represents a four byte integer with conversion
23  * rules for the big endian byte order of ZIP files.
24  *
25  */

26 public final class ZipLong implements Cloneable JavaDoc {
27
28     private long value;
29
30     /**
31      * Create instance from a number.
32      * @param value the long to store as a ZipLong
33      * @since 1.1
34      */

35     public ZipLong(long value) {
36         this.value = value;
37     }
38
39     /**
40      * Create instance from bytes.
41      * @param bytes the bytes to store as a ZipLong
42      * @since 1.1
43      */

44     public ZipLong (byte[] bytes) {
45         this(bytes, 0);
46     }
47
48     /**
49      * Create instance from the four bytes starting at offset.
50      * @param bytes the bytes to store as a ZipLong
51      * @param offset the offset to start
52      * @since 1.1
53      */

54     public ZipLong (byte[] bytes, int offset) {
55         value = ZipLong.getValue(bytes, offset);
56     }
57
58     /**
59      * Get value as four bytes in big endian byte order.
60      * @since 1.1
61      * @return value as four bytes in big endian order
62      */

63     public byte[] getBytes() {
64         return ZipLong.getBytes(value);
65     }
66
67     /**
68      * Get value as Java long.
69      * @since 1.1
70      * @return value as a long
71      */

72     public long getValue() {
73         return value;
74     }
75
76     /**
77      * Get value as four bytes in big endian byte order.
78      * @param value the value to convert
79      * @return value as four bytes in big endian byte order
80      */

81     public static byte[] getBytes(long value) {
82         byte[] result = new byte[4];
83         result[0] = (byte) ((value & 0xFF));
84         result[1] = (byte) ((value & 0xFF00) >> 8);
85         result[2] = (byte) ((value & 0xFF0000) >> 16);
86         result[3] = (byte) ((value & 0xFF000000L) >> 24);
87         return result;
88     }
89
90     /**
91      * Helper method to get the value as a Java long from four bytes starting at given array offset
92      * @param bytes the array of bytes
93      * @param offset the offset to start
94      * @return the correspondanding Java long value
95      */

96     public static long getValue(byte[] bytes, int offset) {
97         long value = (bytes[offset + 3] << 24) & 0xFF000000L;
98         value += (bytes[offset + 2] << 16) & 0xFF0000;
99         value += (bytes[offset + 1] << 8) & 0xFF00;
100         value += (bytes[offset] & 0xFF);
101         return value;
102     }
103
104     /**
105      * Helper method to get the value as a Java long from a four-byte array
106      * @param bytes the array of bytes
107      * @return the correspondanding Java long value
108      */

109     public static long getValue(byte[] bytes) {
110         return getValue(bytes, 0);
111     }
112
113     /**
114      * Override to make two instances with same value equal.
115      * @param o an object to compare
116      * @return true if the objects are equal
117      * @since 1.1
118      */

119     public boolean equals(Object JavaDoc o) {
120         if (o == null || !(o instanceof ZipLong)) {
121             return false;
122         }
123         return value == ((ZipLong) o).getValue();
124     }
125
126     /**
127      * Override to make two instances with same value equal.
128      * @return the value stored in the ZipLong
129      * @since 1.1
130      */

131     public int hashCode() {
132         return (int) value;
133     }
134 }
135
Popular Tags